CodeGym /Blog Jawa /Acak /Prinsip OOP
John Squirrels
tingkat
San Francisco

Prinsip OOP

Diterbitake ing grup
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.

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. Prinsip Pemrograman Berorientasi Objek - 1Sampeyan bisa uga gampang maca kode sing ditulis ing basa iki lan nerangake kanthi stroke sing amba apa sing ditindakake :)

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.

Napa kita kudu OOP?

Napa OOP malah muncul minangka konsep pemrograman anyar? Programer duwe alat sing bisa digunakake, kayata basa prosedural. Apa sing njalari wong-wong mau nyipta sesuatu sing dhasar anyar? Ndhuwur kabeh, kerumitan tugas sing diadhepi. Yen 60 taun kepungkur, tugas programer kaya "ngira-ngira sawetara ekspresi matematika", saiki bisa uga kaya "ngleksanakake 7 endings beda kanggo STALKER game, gumantung saka kombinasi keputusan pemain sing digawe ing titik A, B, C, DE. , lan F ing game." Kaya sing sampeyan ngerteni, tugas-tugas kasebut wis dadi luwih rumit sajrone dekade kepungkur. Lan minangka asil, jinis data dadi luwih rumit. Iki minangka alesan liyane kenapa OOP muncul. Ekspresi matematika bisa dievaluasi kanthi gampang nggunakake primitif biasa. Ora ana obyek sing dibutuhake ing kene. Nanging tugas karo endings game bakal angel malah njlèntrèhaké tanpa nggunakake kelas adat. Yen ngandika, iku cukup gampang kanggo njlèntrèhaké nggunakake kelas lan obyek. Temenan, kita butuh sawetara kelas: Game, Stalker, Ending, PlayerDecision, GameEvent, lan liya-liyane. Ing tembung liyane, sanajan tanpa miwiti kanggo ngatasi masalah, kita bisa gampang "sketsa metu" solusi ing sirah. Kerumitan tugas sing saya tambah meksa para programer dibagi dadi bagean. Nanging iki ora gampang ditindakake ing pemrograman prosedural. Lan cukup asring program kaya wit kanthi akeh cabang sing nuduhake kabeh jalur eksekusi sing bisa ditindakake. Gumantung ing kahanan tartamtu, siji cabang saka program utawa liyane wis kaleksanan. Kanggo program cilik, iki trep, nanging angel banget kanggo dibagi masalah gedhe menyang bagean. Iki minangka alesan liyane kanggo muncule OOP. Paradigma iki menehi kemampuan kanggo para programer kanggo mbagi program dadi pirang-pirang "modul" (kelas), sing saben-saben nindakake bagean dhewe. Kanthi sesambungan karo saben liyane, kabeh obyek ngrampungake karya program kita. Kajaba iku, kita bisa nggunakake maneh kode kita ing papan liya ing program kasebut, sing uga ngirit wektu akeh.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION