Inkapsulacija je pakiranje podataka i funkcija u jednu komponentu. Inkapsulacija, polimorfizam, nasljeđivanje: značajke

20. 2. 2019.

U kasnim 1980-ima, ništa se temeljito nije dogodilo u programiranju. Bilo je mnogo jezika, mnogo kontroverzi i tu je bio Turbo Pascal 5.5, au paketu njegove isporuke bilo je nekoliko čudnih datoteka i nekih ne-uobičajenih konstrukcija u sintaksi.

kapsuliranje

Moguće je da objektno orijentirano programiranje svoj izgled duguje nepoznatom umjetniku, a možda i nekolicini, ali ideja kombiniranja koda i podataka u tim vremenima nije imala osobito veliku vrijednost. To je bilo labavo i neizravno povezano s pojmom "enkapsulacija".

Strukture, funkcije i postupci

Već u prvim verzijama programskih jezika, čak i prije pojave prvih baza podataka, postalo je apsolutno jasno da to nije broj ili niz znakova, nego nešto smisleno. Neka to bude varijabla "brojač" u petlji ili tri varijable malog broja "prezime", "ime", "srednje ime", ali uvijek ima smisla odmah.

"Brojač" je uvijek nakon ciklusa i radi u njemu. "Prezime", "prvo ime", "srednje ime" bit će objavljeno rame uz rame, a njihovo sudjelovanje u mnogim dijelovima koda bit će zajedničko. Negdje će se koristiti samostalno, općenito, imat će jedno značenje.

Funkcije i postupci izvorno su se pojavljivali kao uobičajeni dijelovi koda. Njihova je uporaba izvorno bila namijenjena drugdje u programu. Njihovo pojavljivanje u programu izazvalo je ponavljanje blokova istih akcija. Uzimajući ponavljanje u obliku funkcije ili postupka, pojednostavite lokacije ponavljanja, smanjite količinu koda i pojednostavljeno otklanjanje pogrešaka.

nasljeđivanje polimorfizma enkapsulacije

To nije bilo objektno orijentirano programiranje, već se od samog početka evolucije klasični stil kodiranja bavio kompilacijom podataka, stvaranjem struktura i funkcionalnih dijelova koda.

Razlozi za početak enkapsulacije

Inkapsulacija u programiranju počela je mnogo prije pojavljivanja OOP-a. Bilo je to u dubinama klasičnog stila, značilo je funkcionalno programiranje, strukturno i bilo koji drugi koji je tražio put u budućnost.

Svaki prevodilac i tumač jezika marljivo je uzeo sve novo u svojoj sintaksi, ponudivši developerima opcije za implementaciju semantike.

Informacije nikada nisu bile statične, samo je programiranje još uvijek zadovoljno formalnom verzijom. No, čak i ako su strogo formalizirani, informacije osiguravaju rad koda koji je uvijek povezan s njim. Informacije nikada ne mogu biti statične.

nasljeđivanje enkapsulacije

Najviše trivijalan primjer enkapsulacije, koji je sačuvan već dugo vremena i relevantan je do danas. Tri varijable "prezime", "ime", "srednje ime", gdje god se nalazile, uvijek zahtijevaju funkcije dodavanja, izmjene, brisanja. Štoviše, ove varijable pružaju masu određenih ljudi, tj. Mnogo slučajeva:

  • Ivanov, Ivan, Ivanovič;
  • Petrova, Irina, Vasiljevna;
  • Kukushkina, Polina, Grigorievna;
  • ... i apstraktna klasa ...
  • "prezime", "ime", "srednje ime";
  • ... i tri vječne funkcije ...
  • dodati;
  • promijeniti;
  • za uklanjanje.

Postoji velika raznolikost takvih konstrukcija na bilo kojoj razini (adrese, pozicije, kadrovi, plan proizvodnje). A složenost provedbe drugačijeg dizajna bit će nevjerojatno duga.

Trajanje primjera enkapsulacije

Inkapsulacija je podatak i kod.

  • Riječ je enkapsulacija.
  • Latinska verzija - u kapsuli.

Riječ "kapsula" je ono što ona znači. Činjenica da su mnogi jezici i programeri mislili o njoj (javnom, zaštićenom, privatnom) je zasebna tema i ima relativni ili primijenjeni odnos prema značenju enkapsulacije.

Općenito, instanca je samo opcija (otisak, trenutak) podataka, i te tri metode žive vječno. Kôd kao filtar informacija "osigurava" život instanci, jer je jedan za sve i usput, za sada :

  • kôd je "stalni";
  • označava najjednostavnije nepromjenjivo djelovanje.

Ali drugi primjer može "izbaciti" fokus.

Ako je primjer dodijeljen popisu osoblja tvrtke, tada će direktor i računovođa imati posebno značenje u skupu primjeraka. Ostatak može ostati u uobičajenom "obliku". Ravnatelj i računovođa mogu imati svoje vlastite kodove, odnosno vlastite funkcije.

To znači da život instance ne određuje uvijek funkcionalnost tri čarobne riječi:

  • dodati;
  • promijeniti;
  • za uklanjanje.

Ako je primjer povezan s prvim letom s ljudstvom u svemir, tada će desetak kandidata za prve kozmonaute imati puno posebne funkcionalnosti, stotinjak ljudi (primjerci) će ih gledati na poseban način, bit će mnogo više opcija za specijaliste koji će imati mnogo posebnih. funkcije.

Pokrenite OOP

"Moramo nešto hitno promijeniti", mislili su brojni razvojni inženjeri, te su kao dobar primjer predložili rad s objektima na Turbo Pascal 6.0 Professionalu. To nije idealna ponuda, već vrlo kvalitetna jednostavna i učinkovita.

enkapsulacija podataka

Uz pretpostavku da je "enkapsulacija, polimorfizam, nasljeđivanje" temelj objekta, dobivamo dobar početak. Polimorfizam daje potrebnu dinamiku, jer slučajevi mogu imati različitu funkcionalnost. Mora se nekako "legitimirati" u objektu. Nasljeđivanje omogućuje da se odražava homogenost objekta, da se izgradi genealoško stablo formaliziranih informacija.

Zvuči teško. Uz pretpostavku da je enkapsulacija podataka jednostavna kombinacija podataka i koda, sve postaje vrlo jednostavno i pojavljuje se veliki koncept.

Objekt je podatak i kod. Primjer objekta je samo podatak kojem njegov kôd ima pristup. Može biti puno primjeraka, ali kod za njih je uvijek isti i nije vezan za svakoga, ali je dostupan svima.

Kada instanca objekta zahtijeva posebnu pažnju na sebe, pojavljuje se drugi objekt koji će imati poboljšanu funkcionalnost, tj. Nasljeđuje sve što je bilo u izvornom objektu, ali dodaje nešto svoje.

Svijet se obogaćuje primjerima drugog objekta, koji također imaju nove potrebe. Nova funkcionalnost i novi objekt.

Ali ne može svaki novi objekt imati potomke. Za neke više nisu potrebni. Kao rezultat takve konstrukcije dobiva se razgranata slika objekata, ali u stvarnosti ona daje život masi uzoraka međusobno povezanih pedigreima i funkcionalnim vezama.

Idealna varijanta implementacije zadataka u OOP stilu je kada se enkapsulacija, polimorfizam, nasljeđivanje tako kvalitetno promišljaju da kod u potpunosti nedostaje u programu. Predmeti sami obavljaju svoje funkcije, koriste samo svoj kod, grade međusobne odnose.

OOP život

U stvarnosti sve izgleda vrlo različito. Inkapsulacija je dobra i ne možete ovdje raspravljati. No, da bi se izgradila slika objekata ispravno, da se razmisli o funkcionalnosti svakog od njih, da se predvidi kako će se određeni uzorci ponašati i što se može očekivati ​​od podataka nije lako. Bilo je potrebno pojednostaviti situaciju, a PLO je krenuo putem automatizacije rada razvojnog inženjera, umjesto da rješava stvarne probleme.

Sa stajališta brzine stjecanja iskustva, to je djelotvorna ideja, nakon svega, zašto bi se OOP primijenio na automatizaciju računovodstvenog rada, kada se može pridružiti izborniku na HTML stranici?

Sve je vrlo jednostavno: tu je element izbornika, postoje njegove opcije. Možete pozvati korisnika da odabere opcije izbornika (okomito, vodoravno, padajuće), možete dati gumbe obliku (okrugli, kvadratni, zaobljeni, itd.).

primjer kapsuliranja

Malo je ljudi zainteresirano za rad i život developera. Svatko treba računovodstvo, proizvodnju, obuku, jer treba obavljati stvarne zadatke. Dakle, trebate povećati kolektiv, ali tada će sustav objekata provoditi različiti stručnjaci i oni mogu naškoditi jedni drugima.

Na mnogo načina, ovo stavlja PLO na proizvodne tračnice. Više nije bilo sumnje: kapsuliranje, nasljeđivanje je dobar način, ali kako zaštititi objekte od vanjske interferencije, kako izvana tako i duž loze? Ne mora nužno biti haker. Slučajno uzrokovati oštećenje promjenom podataka pretka, drugi programer može.

Moderno programiranje je puno programera u mnogim udaljenim uredima. Poput pčela, moderni programeri grade jednu zajedničku objektnu strukturu. Svaki bi objekt trebao biti izgrađen prema općim pravilima, a oni podaci i metode za koje je odgovoran jedan programer ne bi trebali biti dostupni drugima. Kada netko treba nešto je druga tema. Prema osnovnom principu, svatko obavlja vlastiti posao na vlastitoj stranici.

Inkapsulacija je dobra, ali ...

PHPWord je moćan proizvod, dobro napravljen i obećavajući. Izvrstan sustav objekata, osmišljen i rad.

Ispod je početak opisa unutarnjeg objekta ovog proizvoda. Jedna jednostavna apstrakcija ćelije tablice iz općenito prazne apstrakcije - neka vrsta spremnika. I to nije sve opis.

Autorov primjer nije slika.

Nema potrebe za ronjenjem u divljinu da bi razumjeli. Korištenje brojnih komentara ovdje ne daje jasnoću, a riječi zaštićene, privatne i javne kažu, prije svega, da je programer treće strane, koji koristi ovu knjižnicu, promijenio privatno u javno na pravom mjestu (vidi komentar: "sc 06/19/2016 bio Privatna „).

To je činjenica greške u kodu, koja je, kada je primijenjena, programer bio prisiljen ispraviti, i stoga je morao nešto promijeniti.

Može se pretpostaviti da je u fazi razvoja bilo nužno ograničiti pristup tim ili drugim objektima, ali ovdje je još jedna stvar važna. Postoji život u slučajevima, postoji život objekata, ali već postoji novi život - što se događa sa sustavom objekata u njegovoj primjeni.

Život u razvoju i životu u aplikaciji. Karakteristično obilježje suvremenog programiranja je kruto poricanje kontinuiteta. Ako je ranije programer jamčio da će svaka nova verzija nadopuniti i poboljšati prethodnu, onda je danas svaka nova verzija objekta, jezika, programskog okruženja fundamentalno ili barem bitno različita od prethodne.

Čak i uvjeti hostinga na hostingu mogu se promijeniti tako da morate ponoviti kod. Često je to vrlo teško.

Dobra nasljednost, dobar prinos

Nitko nije imun na pogreške. Svako novo poslovanje zahtijeva znanje. PHPWord je dobra knjižnica i samo se morate naviknuti na nju. Mnogi profesionalci su proveli mnogo vremena. Programer koji se okupio da ga koristi trebao bi posvetiti dovoljno vremena za proučavanje strukture datoteke Word. Ovo nije tajna.

PHPWord objektni sustav će postati transparentan i pristupačan. Daje se onakvim kakav jest, ali ako postoji želja da se ide dalje, jer je trenutna funkcionalnost nedovoljna. Dobra ideja. Onda je ovo još jedan sustav objekata, i bolje je ako ide dalje.

Nije tako loša ideja tvrdog poricanja kontinuiteta: ona potiče razvoj znanja. Objekti koje je izradio jedan tim programera su njihova razmišljanja o tome kako riješiti problem, kako predstaviti njegovu funkcionalnost.

enkapsulacija u programiranju

Razumijevanje ovog rješenja od strane druge razvojne tvrtke je transformacija iskustva. Ako zamislimo da je ovo samo prototip potrebnog sustava objekata, zašto ga onda ne bi naslijedili? Dobra nasljednost - obilježje prirodne inteligencije, oslanja se na nešto prikladno sa strane programiranja - to je iz područja budućnosti, iako najbliže.

Ispravno enkapsuliranje

Inkapsulacija nije kombinacija podataka i koda. To je kombinacija onoga što je dostupno i onoga što je poželjno. Ako mislite ne s podacima i algoritmima, nego percipirate stvarnost i izvodite adekvatnu enkapsulaciju, nasljeđujući ovu akciju od developera do developera, onda je vjerojatno: pojavljivanje sustava objekata koji se kreću i razvijaju se još uvijek moguće.