Hi! Ing pawulangan dina iki, kita bakal ngomong babagan Prinsip pemrograman berorientasi obyek. Apa sampeyan tau mikir kenapa Jawa dirancang persis kaya saiki? Maksudku, sampeyan ngumumake kelas lan nggawe obyek adhedhasar kelas, kelas duwe cara, lan liya-liyane. Yagene konsep "obyek" diciptakake lan dilebokake ing ngarep? Apa kabeh basa dirancang kanthi cara iki? Yen ora, apa kaluwihan kanggo Jawa? Kaya sing sampeyan ngerteni, akeh pitakonan :) Coba wangsulana saben-saben ing pelajaran dina iki.
Sampeyan bisa uga gampang maca kode sing ditulis ing basa iki lan nerangake kanthi stroke sing amba apa sing ditindakake :)
Apa itu object-oriented programming (OOP)?
Mesthi, Jawa ora digawe saka obyek lan kelas mung kanggo seneng-seneng. Iku dudu karep pangripta Jawa, malah dudu panemune. Ana akeh basa liyane adhedhasar obyek. Basa kasebut pisanan diarani "Simula". Iki ditemokake ing taun 1960-an ing Norwegia. Apa maneh, konsep "kelas" lan "metode" katon ing Simula. Miturut standar pangembangan piranti lunak, "Simula" katon kaya basa kuna, nanging sapa wae bisa ndeleng "mirip kulawarga" karo Jawa.
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;
Kode sampel kode iki dijupuk saka "Simula - 50 taun OOP" dening Weekly-geekly. Minangka sampeyan bisa ndeleng, Jawa ora beda banget karo mbah kakunge :) Iki amarga kasunyatan sing katon saka Simula nandhani lair saka konsep anyar: object-oriented programming. Wikipedia nemtokake OOP kaya mangkene: "Pemrograman Berorientasi Objek (OOP) yaiku paradigma pemrograman adhedhasar konsep "obyek", sing bisa ngemot data, ing wangun kolom (asring dikenal minangka atribut), lan kode, ing wangun. prosedur (asring dikenal minangka metode). Miturut pendapatku, iki definisi sing apik banget. Ora suwe sampeyan wiwit sinau basa Jawa, nanging definisi iki mbokmenawa ora ngemot tembung sing sampeyan ora ngerti :) Dina iki OOP minangka metodologi pemrograman sing paling umum. Saliyane ing Jawa, Prinsip OOP digunakake ing pirang-pirang basa populer sing sampeyan wis krungu. Contone, C++ (aktif digunakake ing pangembangan game), Objective-C lan Swift (digunakake kanggo nulis program kanggo piranti Apple), Python (paling populer ing machine learning), PHP (salah sawijining basa pangembangan web paling populer), JavaScript ( iku luwih gampang kanggo ngomong apa iku ora digunakake kanggo) lan akeh liyane. Dadi, apa prinsip OOP? Kita bakal ngandhani kanthi rinci. Apa prinsip OOP? Kita bakal ngandhani kanthi rinci. Apa prinsip OOP? Kita bakal ngandhani kanthi rinci.
Prinsip OOP
Iki minangka pondasi dhasar. 4 fitur utama sing bebarengan mbentuk paradigma pemrograman berorientasi obyek. Pangerten iku penting kanggo dadi programmer sukses.Prinsip 1. Pusaka
Kabar apik: sampeyan wis ngerti sawetara prinsip OOP! :) Kita wis nemu warisan kaping pirang-pirang ing pelajaran, lan kita bisa nggunakake. Warisan minangka mekanisme sing ngidini sampeyan njlèntrèhaké kelas anyar adhedhasar kelas (wong tuwa) sing wis ana. Kanthi mengkono, kelas anyar nyilih properti lan fungsi kelas induk. Apa warisan lan apa kaluwihan sing diwenehake? Ndhuwur kabeh, nggunakake maneh kode. Kolom lan metode sing diumumake ing kelas induk bisa digunakake ing kelas turunan. Yen kabeh jinis mobil duwe 10 lapangan umum lan 5 cara sing padha, sampeyan mung kudu mindhah menyang Auto.kelas induk. Sampeyan bisa nggunakake ing kelas turunan tanpa masalah. Kaluwihan padhet: loro kuantitatif (kurang kode) lan, minangka asil, kualitatif (kelas dadi luwih prasaja). Kajaba iku, warisan banget fleksibel - sampeyan bisa nambah fungsi kapisah sing ora ana turunane (sawetara lapangan utawa prilaku sing spesifik kanggo kelas tartamtu). Umumé, kaya ing urip nyata, kita kabeh padha karo wong tuwa, nanging uga beda karo dheweke :)Prinsip 2. Abstraksi
Iki minangka prinsip sing prasaja banget. Abstraksi tegese kanggo ngenali ciri utama, paling pinunjul saka soko, nalika bebarengan mbuwang samubarang cilik lan ora pati penting. Ora perlu reinvent setir. Ayo kelingan conto saka pelajaran lawas babagan kelas. Upaminipun kita nggawe sistem filing kanggo karyawan perusahaan. Kanggo nggawe obyek "karyawan", kita wis nulis kelas Employee . Karakteristik apa sing penting kanggo nggambarake ing sistem filing perusahaan? Jeneng, tanggal lahir, SSN, lan ID karyawan. Nanging ora mungkin kita butuh dhuwur karyawan, warna mata, utawa warna rambut kanggo jinis rekaman iki. Perusahaan ora mbutuhake informasi kasebut babagan karyawan. Dadi, ing kelas Karyawan , kita ngumumake variabel ing ngisor iki:, int age , int socialSecurityNumber , lan int employeeId . Lan kita ngilangi informasi sing ora perlu kaya warna mata. Nanging, yen kita nggawe sistem pengajuan kanggo agensi modeling, kahanan bakal owah sacara dramatis. Dhuwur model, werna mripat, lan werna rambut minangka ciri penting, nanging SSN dheweke pancen ora relevan kanggo kita. Dadi, ing kelas Model , kita nggawe variabel ing ngisor iki: String height , String hair , String eyes .Prinsip 3. Enkapsulasi
Kita wis ngalami iki. Ing Jawa, enkapsulasi tegese mbatesi kemampuan maca lan ngganti data. Kaya sing sampeyan ngerteni, istilah kasebut adhedhasar tembung "kapsul". Kita bakal nggunakake "kapsul" kanggo ndhelikake sawetara data penting sing ora pengin wong liya ngganti. Punika conto prasaja saka urip nyata. Sampeyan duwe jeneng ngarep lan jeneng mburi. Kabeh kanca-kanca ngerti. Nanging dheweke ora duwe kemampuan kanggo ngganti jeneng ngarep utawa mburi sampeyan. Kita bisa ngomong yen proses kanggo nindakake iku "encapsulated" dening sistem pengadilan: sampeyan bisa ngganti jeneng mburi mung liwat petugas pengadilan, lan mung sampeyan bisa nindakake iku. "Panganggo" liyane duwe akses "mung diwaca" menyang jeneng ngarep lan mburi :) Conto ilustrasi liyane yaiku awis sing disimpen ing omah. Ninggalake kanthi jelas ing tengah kamar sampeyan ora apik. Sembarang "pangguna" (wong sing teka ing omah sampeyan) bakal bisa ngganti jumlah dhuwit sampeyan, yaiku bisa njupuk dhuwit sampeyan. Iku bakal luwih apik kanggo encapsulate ing aman. Banjur akses bakal kasedhiya mung kanggo sampeyan lan mung nggunakake kode khusus. Conto enkapsulasi sing jelas sing wis sampeyan gunakake yaiku modifier akses (pribadi, umum, lsp), uga setter lan getter. Yen sampeyan ora encapsulate ingBidang umur kelas kucing , mula sapa wae bisa nulis:
Cat.age = -1000;
Mekanisme enkapsulasi ngijini kita nglindhungi lapangan umur karo cara setter, ngendi kita bisa mesthekake yen umur ora bisa disetel kanggo nomer negatif.
Prinsip 4. Polimorfisme
Polimorfisme yaiku kemampuan kanggo nggarap sawetara jinis kaya-kaya jinis sing padha. Kajaba iku, prilaku obyek bakal beda-beda gumantung saka jinise. Apa sing muni rumit? Ayo padha ngerti saiki. Coba conto sing paling gampang: kewan. Nggawe kelas Animal karo siji ngandika () cara, lan loro subclasses - Cat lan Dog .
public class Animal {
public void speak() {
System.out.println("Hello!");
}
}
public class Dog extends Animal {
@Override
public void speak() {
System.out.println ("Woof-woof!");
}
}
public class Cat extends Animal {
@Override
public void speak() {
System.out.println("Meow!");
}
}
Saiki kita bakal nyoba ngumumake variabel referensi Animal lan nemtokake obyek Dog kasebut.
public class Main {
public static void main(String[] args) {
Animal dog = new Dog();
dog.speak();
}
}
Cara apa sampeyan mikir bakal diarani? Animal.speak() utawa Dog.speak() ? Cara ing kelas Dog bakal diarani: Woof-woof! Kita nggawe referensi kewan , nanging obyek kasebut tumindak kaya asu . Yen perlu, bisa tumindak kaya kucing, jaran, utawa kewan liyane. Sing penting yaiku nemtokake subkelas khusus kanggo variabel referensi Animal umum . Iki nggawe akal, amarga kabeh asu iku kewan. Sing ana ing pikirane nalika ujar "prilaku obyek bakal beda-beda gumantung saka jinise." Yen kita nggawe obyek Kucing ...
public static void main(String[] args) {
Animal cat = new Cat();
cat.speak();
}
cara ngomong () bakal nampilake "Meow!" Nanging apa tegese 'kemampuan kanggo nggarap sawetara jinis kaya-kaya padha jinis'? Iki uga cukup langsung. Coba bayangake yen kita nggawe barbershop kanggo kewan. Barbershop kita kudu bisa kanggo menehi kewan sembarang Potong, supaya kita nggawe trim () cara karo parameter Animal (kewan njupuk cukuran).
public class AnimalBarbershop {
public void trim(Animal animal) {
System.out.println("The haircut is done!");
}
}
Lan saiki kita bisa ngliwati obyek Cat lan Dog menyang cara trim () !
public static void main(String[] args) {
Cat cat = new Cat();
Dog dog = new Dog();
AnimalBarbershop barbershop = new AnimalBarbershop();
barbershop.trim(cat);
barbershop.trim(dog);
}
Lan ing ngisor iki conto sing jelas: kelas AnimalBarbershop bisa digunakake karo jinis Cat lan Dog kaya-kaya padha. Ing wektu sing padha, Kucing lan Asu duwe tindak tanduk sing beda-beda: saben wong ngomong beda.
GO TO FULL VERSION