JavaRush /Blog Jawa /Random-JV /prinsip OOP

prinsip OOP

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

Prinsip OOP:

  1. pusaka
  2. abstraksi
  3. Enkapsulasi
  4. Polimorfisme

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 ". Prinsip Pemrograman Berorientasi Objek - 2
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 :)
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 Pemrograman Berorientasi Objek - 3

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 induk Auto. 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 kelas Employee. 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 Employeekita bakal nyetel variabel String name, int age, int socialInsuranceNumberlan 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 Modelkita 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, publicetc.) lan getter-setter. Yen kolom agekelas Catora dienkapsulasi, sapa wae bisa nulis:
Cat.age = -1000;
Lan mekanisme enkapsulasi ngidini kita kanggo nglindhungi lapangan agekaro 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 kelas Animalkanthi cara siji - voice(), lan loro turunane - Catlan 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 Animallan 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 Animalkanggo 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 shearobyek Catlan 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 AnimalBarbershopbisa digunakake kanthi jinis Catkaya- Dogkaya jinis sing padha. Ing wektu sing padha, padha duwe prilaku Catbeda Dog: padha nggunakake swara sing beda.

Alasan kanggo munculé OOP

Yagene konsep pemrograman anyar iki - OOP - malah muncul ? Programer duwe alat sing bisa digunakake: basa prosedural, contone. Apa sing njalari wong-wong mau nyipta sesuatu sing dhasar anyar? Kaping pisanan, komplikasi tugas sing diadhepi. Yen 60 taun kepungkur, tugas programmer katon kaya "ngitung persamaan matematika kaya ngono," saiki bisa uga kaya "ngleksanakake 7 endings beda kanggo STALKER game gumantung saka keputusan sing digawe pangguna ing momen game A, B, C, D. , E, F lan kombinasi solusi kasebut." Tugas, kaya sing sampeyan ngerteni, wis dadi luwih rumit sajrone dekade kepungkur. Iki tegese jinis data dadi luwih rumit. Iki minangka alesan liyane kanggo muncule OOP. Conto karo persamaan bisa gampang ditanggulangi nggunakake primitif biasa; ora ana obyek sing dibutuhake ing kene. Nanging bakal angel malah njlèntrèhaké masalah karo endings game tanpa nggunakake sawetara kelas sing wis nemokke. Nanging ing wektu sing padha, cukup gampang kanggo njlèntrèhaké ing kelas lan obyek: kita bakal mbutuhake kelas Game, kelas Stalker, kelas Ending, kelas Keputusan Pemain, kelas Game Moment, lan liya-liyane. Tegese, sanajan tanpa miwiti ngatasi masalah, kita bisa kanthi gampang mbayangake "sketsa" solusi kasebut ing sirah kita. Kerumitan masalah sing saya tambah wis meksa programer kanggo mbagi masalah dadi bagean. Nanging ing program prosedural iki ora supaya gampang. Lan asring banget program kasebut minangka "wit" saka pirang-pirang cabang kanthi kabeh opsi sing bisa ditindakake. Gumantung ing kahanan tartamtu, program kasebut dieksekusi ing siji cabang utawa liyane. Kanggo program cilik, pilihan iki trep, nanging mbagi tugas gedhe dadi bagean angel banget. Kebutuhan iki dadi alesan liyane kanggo muncule OOP. Konsep iki menehi programer kemampuan kanggo dibagi program menyang Bunch saka "modul" kelas, saben kang nindakake bagean dhewe saka proyek. Kabeh obyek, sesambungan karo saben liyane, mbentuk karya program kita. Kajaba iku, kode sing kita tulis bisa digunakake maneh 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