Hello! Apa kowe tau mikir kenapa Jawa didesain kaya ngono? Ing pangertèn sing nggawe kelas, adhedhasar - obyek, kelas duwe cara, etc. Nanging kenapa struktur basa kaya program kasebut kalebu kelas lan obyek, lan dudu barang liya? Yagene konsep "obyek" diciptakake lan dilebokake ing ngarep? Apa kabeh basa nganggo cara iki lan, yen ora, apa manfaate basa Jawa? Kaya sing sampeyan ngerteni, akeh pitakonan :) Coba wangsulane saben-saben ing kuliah dina iki.
Kristen Nygaard lan Ole Johan Dahl - pencipta Simula
Iku bakal koyone sing Simula minangka basa kuna miturut standar pemrograman, nanging sambungan "kulawarga" karo Jawa katon kanthi mripat langsung. Paling kamungkinan, sampeyan bisa kanthi gampang maca kode sing ditulis lan nerangake kanthi umum apa sing ditindakake :)
Prinsip OOP:
Apa itu object-oriented programming (OOP)
Mesthi wae, Jawa digawe saka obyek lan kelas kanthi alesan. Iki dudu karep para pangripta, utawa malah panemune. Ana akeh basa liyane sing adhedhasar obyek. Basa kasebut pisanan diarani Simula, lan iki diciptakake ing taun 1960-an ing Norwegia. Antarane liyane, Simula ngenalake konsep " kelas " lan " metode ".Begin
Class Rectangle (Width, Height); Real Width, Height;
Begin
Real Area, Perimeter;
Procedure Update;
Begin
Area := Width * Height;
OutText("Rectangle is updating, Area = "); OutFix(Area,2,8); OutImage;
Perimeter := 2*(Width + Height);
OutText("Rectangle is updating, Perimeter = "); OutFix(Perimeter,2,8); OutImage;
End of Update;
Update;
OutText("Rectangle created: "); OutFix(Width,2,6);
OutFix(Height,2,6); OutImage;
End of Rectangle;
Rectangle Class ColouredRectangle (Color); Text Color;
Begin
OutText("ColouredRectangle created, color = "); OutText(Color);
OutImage;
End of ColouredRectangle;
Ref(Rectangle) Cr;
Cr :- New ColouredRectangle(10, 20, "Green");
End;
Conto kode dijupuk saka artikel Simula - 50 taun OOP . Kaya sing sampeyan ngerteni, Jawa lan leluhure ora beda-beda saka siji liyane :) Iki amarga kasunyatan sing katon Simula nandhani lair saka konsep anyar - pemrograman berorientasi obyek. Wikipedia menehi definisi OOP ing ngisor iki: Pemrograman berorientasi obyek (OOP) yaiku metodologi pemrograman adhedhasar makili program minangka kumpulan obyek, saben-saben minangka conto saka kelas tartamtu, lan kelas kasebut mbentuk hirarki warisan. Iku, ing mratelakake panemume, banget sukses. Sampeyan bubar sinau basa Jawa, nanging meh ora ana tembung sing ora dingerteni :) Dina iki, OOP minangka metodologi pemrograman sing paling umum. Saliyane Jawa, prinsip OOP digunakake ing pirang-pirang basa populer sing bisa uga wis sampeyan krungu. Iki C ++ (iki digunakake kanthi aktif dening pangembang game komputer), Objective-C lan Swift (padha nulis program kanggo piranti Apple), Python (paling dikarepake ing machine learning), PHP (salah sawijining basa pangembangan web sing paling populer), JavaScript (luwih prasaja ngomong apa sing ora ditindakake) lan liya-liyane. Bener, apa "prinsip" OOP iki? Ayo dicritakake kanthi luwih rinci.
prinsip OOP
Iki minangka dhasar. 4 fitur utama sing bebarengan mbentuk paradigma pemrograman berorientasi obyek. Ngerteni dheweke minangka kunci kanggo dadi programmer sing sukses.Prinsip 1. Pusaka
Kabar apik yaiku sampeyan wis ngerti sawetara prinsip OOP! :) Kita wis ketemu pusaka kaping pindho ing ceramah, lan kita wis wektu kanggo bisa karo. Warisan minangka mekanisme sing ngidini sampeyan njlèntrèhaké kelas anyar adhedhasar sing wis ana (tiyang sepah). Ing kasus iki, properti lan fungsi kelas induk dipinjam dening kelas anyar. Apa sebabe warisan perlu lan apa keuntungan sing diwenehake? Kaping pisanan, gunakake maneh kode. Bidang lan metode sing diterangake ing kelas induk bisa digunakake ing kelas turunan. Yen kabeh jinis mobil duwe 10 lapangan umum lan 5 cara podho rupo, sampeyan mung kudu sijine ing kelas indukAuto
. Sampeyan bisa nggunakake ing kelas turunan tanpa masalah. Keuntungan sing padhet: kanthi kuantitatif (kurang kode) lan, minangka asil, kanthi kualitatif (kelas dadi luwih gampang). Ing wektu sing padha, mekanisme warisan banget fleksibel, lan sampeyan bisa nambah fungsi sing ilang ing turunane kanthi kapisah (sawetara lapangan utawa prilaku khusus kanggo kelas tartamtu). Umumé, kaya ing urip biasa: kita kabeh padha karo wong tuwa ing sawetara cara, nanging beda karo wong-wong mau ing sawetara cara :)
Prinsip 2. Abstraksi
Iki minangka prinsip sing prasaja banget. Abstraksi tegese nyorot ciri utama, paling penting saka obyek lan kosok balene - mbuwang sekunder, sing ora penting. Ayo dadi ora reinvent setir lan elinga conto saka kuliah lawas bab kelas. Ayo kita nggawe lemari arsip karyawan perusahaan. Kanggo nggawe obyek karyawan, kita nulis kelasEmployee
. Karakteristik apa sing penting kanggo katrangan ing file perusahaan? Jeneng lengkap, tanggal lahir, nomer jaminan sosial, nomer identifikasi pajak. Nanging ora mungkin ing kertu jinis iki kita butuh dhuwur, mripat lan warna rambute. Perusahaan ora mbutuhake informasi babagan karyawan kasebut. Mulane, kanggo kelas Employee
kita bakal nyetel variabel String name
, int age
, int socialInsuranceNumber
lan int taxNumber
, lan kita bakal ninggalake informasi sing ora perlu kanggo kita, kayata werna mripat, lan abstrak. Nanging yen kita nggawe katalog model foto kanggo agensi, kahanan diganti kanthi dramatis. Kanggo njlèntrèhaké model fashion, dhuwur, werna mata lan werna rambut penting banget kanggo kita, nanging nomer TIN ora dibutuhake. Mulane, ing kelas Model
kita nggawe variabel String height
, String hair
, String eyes
.
Prinsip 3: Enkapsulasi
Kita wis nemoni. Enkapsulasi ing Jawa tegese matesi akses menyang data lan kemampuan kanggo ngganti. Nalika sampeyan bisa ndeleng, iku adhedhasar tembung "kapsul". Ing "kapsul" iki kita ndhelikake sawetara data penting kanggo kita sing kita ora pengin wong ngganti. Conto prasaja saka urip. Sampeyan duwe jeneng ngarep lan mburi. Saben uwong sing sampeyan kenal ngerti dheweke. Nanging dheweke ora duwe akses kanggo ngganti jeneng ngarep lan mburi sampeyan. Proses iki, siji bisa ngomong, "encapsulated" ing kantor passport: sampeyan mung bisa ngganti jeneng ngarep lan mburi ana, lan mung sampeyan bisa nindakake iku. "Panganggo" liyane duwe akses mung maca menyang jeneng ngarep lan mburi :) Conto liyane yaiku dhuwit ing apartemen sampeyan. Ninggalake wong-wong mau ing ngarsane kosong ing tengah kamar ora apike. Sembarang "pangguna" (wong sing teka ing omah sampeyan) bakal bisa ngganti jumlah dhuwit sampeyan, i.e. Pick munggah. Iku luwih apik kanggo encapsulate ing aman. Mung sampeyan bakal duwe akses lan mung karo kode khusus. Conto jelas enkapsulasi sing wis sampeyan gunakake yaiku modifier akses (private
, public
etc.) lan getter-setter. Yen kolom age
kelas Cat
ora dienkapsulasi, sapa wae bisa nulis:
Cat.age = -1000;
Lan mekanisme enkapsulasi ngidini kita kanggo nglindhungi lapangan age
karo cara setter, kang kita bisa sijine mriksa sing umur ora bisa dadi nomer negatif.
Prinsip 4. Polimorfisme
Polimorfisme yaiku kemampuan kanggo nambani macem-macem jinis kaya-kaya padha karo jinis sing padha. Ing kasus iki, prilaku obyek bakal beda-beda gumantung saka jinis sing dadi kagungane. Muni rada rumit? Ayo dipikir saiki. Ayo njupuk conto sing paling gampang - kewan. Ayo nggawe kelasAnimal
kanthi cara siji - voice()
, lan loro turunane - Cat
lan Dog
.
public class Animal {
public void voice() {
System.out.println("Voice!");
}
}
public class Dog extends Animal {
@Override
public void voice() {
System.out.println("Bow-wow!");
}
}
public class Cat extends Animal {
@Override
public void voice() {
System.out.println("Meow!");
}
}
Saiki ayo nyoba nggawe link Animal
lan nemtokake obyek Dog
.
public class Main {
public static void main(String[] args) {
Animal dog = new Dog();
dog.voice();
}
}
Cara apa sampeyan mikir bakal diarani? Animal.voice()
utawa Dog.voice()
? Metode kelas kasebut bakal diarani Dog
: Woof-woof! Kita nggawe referensi Animal
, nanging obyek kasebut tumindak kaya Dog
. Yen perlu, dheweke bisa tumindak kaya kucing, jaran utawa kewan liyane. Sing utama yaiku nemtokake referensi saka jinis umum Animal
kanggo obyek saka kelas turunan tartamtu. Iki logis, amarga kabeh asu iku kewan. Iki tegese nalika kita ujar "obyek bakal tumindak beda-beda gumantung saka jinise." Yen kita nggawe obyek Cat
−
public static void main(String[] args) {
Animal cat = new Cat();
cat.voice();
}
cara voice()
bakal output "Meow!" Apa tegese "kemampuan kanggo nggarap sawetara jinis kaya-kaya padha jinis"? Iki uga cukup gampang. Ayo bayangake yen kita nggawe salon rambut kanggo kewan. Salon rambut kita kudu bisa ngethok kabeh kewan, mula kita bakal nggawe metode shear()
("potong") kanthi parameter Animal
- kewan sing bakal dipotong.
public class AnimalBarbershop {
public void shear(Animal animal) {
System.out.println("The haircut is ready!");
}
}
Lan saiki kita bisa ngliwati shear
obyek Cat
lan obyek menyang metode kasebut Dog
!
public static void main(String[] args) {
Cat cat = new Cat();
Dog dog = new Dog();
AnimalBarbershop barbershop = new AnimalBarbershop();
barbershop.shear(cat);
barbershop.shear(dog);
}
Ing ngisor iki conto sing jelas: kelas kasebut AnimalBarbershop
bisa digunakake kanthi jinis Cat
kaya- Dog
kaya jinis sing padha. Ing wektu sing padha, padha duwe prilaku Cat
beda Dog
: padha nggunakake swara sing beda.
GO TO FULL VERSION