Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Savjet
  • Polimorfizam - šta je to? Genetski polimorfizam. Enkapsulacija, nasljeđivanje, polimorfizam (Osnove PHP-a - Lekcija iz kursa) Osnovni koncepti polimorfizma nasljeđivanja OOP inkapsulacije

Polimorfizam - šta je to? Genetski polimorfizam. Enkapsulacija, nasljeđivanje, polimorfizam (Osnove PHP-a - Lekcija iz kursa) Osnovni koncepti polimorfizma nasljeđivanja OOP inkapsulacije

Genetski polimorfizam je stanje u kojem postoji dugotrajna raznolikost gena, ali je učestalost najrjeđeg gena u populaciji veća od jedan posto. Njegovo održavanje nastaje zbog stalne mutacije gena, kao i njihove stalne rekombinacije. Prema istraživanju koje su sproveli naučnici, genetski polimorfizam je postao široko rasprostranjen, jer može postojati nekoliko miliona kombinacija gena.

Velika zaliha

Bolja adaptacija populacije na novu sredinu zavisi od velike ponude polimorfizma, au ovom slučaju evolucija se odvija mnogo brže. Nije praktično procijeniti cijeli broj polimorfnih alela koristeći tradicionalne genetske metode. To je zbog činjenice da se prisustvo određenog gena u genotipu postiže ukrštanjem jedinki koje imaju različite fenotipske karakteristike određene genom. Ako znate koji dio određene populacije čine jedinke s različitim fenotipovima, tada postaje moguće odrediti broj alela o kojima ovisi formiranje određene osobine.

Kako je sve počelo?

Genetika se počela ubrzano razvijati 60-ih godina prošlog stoljeća, tada su se počeli koristiti enzimi u gelovima, što je omogućilo određivanje genetskog polimorfizma. Šta je ovo metoda? Uz njegovu pomoć se proteini kreću u električnom polju, što ovisi o veličini proteina koji se pomiče, njegovoj konfiguraciji, kao i ukupnom naboju u različitim dijelovima gela. Nakon toga, ovisno o lokaciji i broju mrlja koje se pojavljuju, identificira se identificirana supstanca. Za procjenu polimorfizma proteina u populaciji, vrijedi ispitati otprilike 20 ili više lokusa. Zatim se matematičkom metodom određuje broj i omjer homo- i heterozigota. Prema istraživanjima, neki geni mogu biti monomorfni, dok drugi mogu biti neobično polimorfni.

Vrste polimorfizma

Pojam polimorfizma je izuzetno širok, uključuje prijelaznu i uravnoteženu varijantu. To zavisi od selektivne vrijednosti gena i prirodne selekcije, koja vrši pritisak na populaciju. Osim toga, može biti genetski i hromozomski.

Genski i hromozomski polimorfizam

Polimorfizam gena je u tijelu predstavljen s više od jednog alela; upečatljiv primjer za to je krv. Hromozomske predstavljaju razlike unutar hromozoma koje nastaju zbog aberacija. Međutim, postoje razlike u heterokromatskim regijama. U nedostatku patologije koja će dovesti do oštećenja ili smrti, takve su mutacije neutralne.

Tranzicioni polimorfizam

Prijelazni polimorfizam nastaje kada se alel koji je nekada bio uobičajen u populaciji zamijeni drugim koji njegovom nosiocu daje veću prilagodljivost (koji se naziva i višestruki alelizam). Kod date sorte dolazi do usmjerenog pomaka u postotku genotipova, zbog čega dolazi do evolucije i njegove dinamike. Fenomen industrijskog mehanizma može biti dobar primjer koji karakterizira prijelazni polimorfizam. Kakav je to pokazuje jednostavan leptir, koji je razvojem industrije bijelu boju svojih krila promijenio u tamnu. Ovaj fenomen se počeo opažati u Engleskoj, gdje se više od 80 vrsta leptira iz svijetlokremnih cvjetova pretvorilo u tamne, što je prvi put uočeno nakon 1848. godine u Manchesteru zbog brzog razvoja industrije. Već 1895. godine više od 95% moljaca dobilo je tamnu boju krila. Takve promjene povezane su s činjenicom da su stabla drveća postala zadimljena, a svijetli leptiri su postali lak plijen drozdova i crvendaća. Promjene su nastale zbog mutantnih melanističkih alela.

Balansirani polimorfizam

Definicija „uravnoteženog polimorfizma“ karakterizira odsustvo pomaka u bilo kakvim brojčanim omjerima različitih oblika genotipova u populaciji koja je u stabilnim uvjetima okoline. To znači da iz generacije u generaciju omjer ostaje isti, ali može blago fluktuirati unutar određene vrijednosti, koja je konstantna. U poređenju sa tranzicijskim, uravnoteženim polimorfizmom - šta je to? To je prvenstveno statički evolucijski proces. I. I. Shmalhausen mu je 1940. također dao naziv heteromorfizam ravnoteže.

Primjer uravnoteženog polimorfizma

Jasan primjer uravnoteženog polimorfizma je prisustvo dva spola kod mnogih monogamnih životinja. To je zbog činjenice da imaju jednake selektivne prednosti. Njihov odnos unutar jedne populacije je uvijek jednak. Ako u populaciji postoji poligamija, selektivni omjer predstavnika oba spola može biti poremećen, pri čemu se predstavnici jednog spola mogu ili potpuno uništiti ili u većoj mjeri eliminirati iz reprodukcije nego predstavnici suprotnog spola.

Drugi primjer bi bila krvna grupa prema ABO sistemu. U ovom slučaju, učestalost različitih genotipova u različitim populacijama može biti različita, ali u isto vrijeme ne mijenja svoju postojanost iz generacije u generaciju. Jednostavno rečeno, nijedan genotip nema selektivnu prednost nad drugim. Prema statistikama, muškarci sa prvom krvnom grupom imaju duži životni vek od ostalih pripadnika jačeg pola drugih krvnih grupa. Uz to, rizik od razvoja čira na dvanaestopalačnom crijevu u prisutnosti prve grupe je veći, ali može doći do perforacije, a to će uzrokovati smrt ako se pomoć odloži.

Genetska ravnoteža

Ovo krhko stanje može biti poremećeno u populaciji kao posljedica pojave, i moraju se javljati sa određenom učestalošću iu svakoj generaciji. Istraživanja su pokazala da su polimorfizmi gena hemostatskog sistema, čije dekodiranje jasno daje do znanja da li evolucijski proces promiče ove promjene ili, obrnuto, suzbija ih, izuzetno su važni. Ako pratite tok mutantnog procesa u određenoj populaciji, također možete procijeniti njegovu vrijednost za adaptaciju. Može biti jednaka jedan ako mutacija nije isključena tokom procesa selekcije i ne postoje prepreke za njeno širenje.

Većina slučajeva pokazuje da je vrijednost takvih gena manja od jedan, a u slučaju nesposobnosti takvih mutanata da se razmnožavaju, sve se svodi na 0. Mutacije ove vrste se u procesu prirodne selekcije odbacuju, ali to čini ne isključuju ponovljene promjene u istom genu, čime se nadoknađuje eliminacija koja se vrši selekcijom. Tada je postignuta ravnoteža, mutirani geni se mogu pojaviti ili, obrnuto, nestati. To dovodi do uravnoteženog procesa.

Primjer koji može jasno okarakterizirati ono što se događa je anemija srpastih stanica. U ovom slučaju dominantni mutirani gen u homozigotnom stanju doprinosi ranoj smrti organizma. Heterozigotni organizmi preživljavaju, ali su podložniji bolestima malarije. Balansirani polimorfizam gena za anemiju srpastih ćelija može se pratiti u područjima rasprostranjenosti ove tropske bolesti. U takvoj populaciji homozigoti (pojedinci sa istim genima) se eliminišu, a selekcija deluje u korist heterozigota (pojedinaca sa različitim genima). Zbog viševektorske selekcije koja se dešava u genskom fondu populacije, u svakoj generaciji se održavaju genotipovi, koji osiguravaju bolju prilagodljivost organizma uslovima sredine. Uz prisustvo gena za anemiju srpastih ćelija, postoje i drugi tipovi gena koji karakterišu polimorfizam. Šta ovo daje? Odgovor na ovo pitanje će biti fenomen koji se zove heterozis.

Heterozigotne mutacije i polimorfizam

Heterozigotni polimorfizam osigurava odsustvo fenotipskih promjena u prisustvu recesivnih mutacija, čak i ako su štetne. Ali u isto vrijeme, mogu se akumulirati u populaciji do visokog nivoa, koji može premašiti štetne dominantne mutacije.

evolucijski proces

Evolucijski proces je kontinuiran, a njegov preduvjet je polimorfizam. To znači stalnu prilagodljivost određene populacije njenom staništu. Organizmi različitih spolova koji žive unutar iste grupe mogu biti u heterozigotnom stanju i prenositi se s generacije na generaciju dugi niz godina. Uz to, njihova fenotipska manifestacija možda i ne postoji - zbog ogromne rezerve genetske varijabilnosti.

Gen za fibrinogen

U većini slučajeva, istraživači smatraju polimorfizam gena fibrinogena prekursorom razvoja ishemijskog moždanog udara. No, u ovom trenutku dolazi do izražaja problem u kojem genetski i stečeni faktori mogu utjecati na razvoj ove bolesti. Ova vrsta moždanog udara nastaje zbog tromboze cerebralnih arterija, a proučavanjem polimorfizma gena za fibrinogen mogu se razumjeti mnogi procesi, utječući na koje se bolest može spriječiti. Naučnici trenutno nisu dovoljno proučavali veze između genetskih promjena i biohemijskih parametara krvi. Dalja istraživanja će omogućiti da se utiče na tok bolesti, promeni njen tok ili jednostavno spreči u ranoj fazi razvoja.

Objektno orijentirano programiranje(OOP) je pristup kreiranju programa zasnovan na korištenju klasa i objekata koji međusobno djeluju.

Klasa (java klasa) opisuje strukturu i ponašanje objekata. Uređaj se opisuje kroz skup karakteristika (osobina), a ponašanje se opisuje kroz skup operacija (metoda) dostupnih za objekte. Klase se mogu kreirati na osnovu postojećih dodavanjem ili nadjačavanjem svojstava i metoda.

Klase predstavljaju šablone po kojima se grade objekti. Objekti su programski elementi koji imaju sličan skup karakteristika i ponašanja (to jest, oni su elementi izgrađeni na osnovu iste klase). Svaki objekt ima određeno stanje, određeno je vrijednošću svih njegovih svojstava. U jednom programu može postojati nekoliko klasa, a objekti različitih klasa mogu međusobno komunicirati (putem metoda).

Nasljeđe, proširuje se

Nasljeđivanje je sastavni dio Jave. Prilikom korištenja nasljeđivanja vodi se računa da nova klasa koja nasljeđuje svojstva osnovne (roditeljske) klase ima sva svojstva koja ima roditelj. Kod koristi operand produžava, nakon čega slijedi ime osnovne klase. Ovo otvara pristup svim poljima i metodama osnovne klase.

Koristeći nasljeđivanje, možete kreirati generičku "java klasu" koja definira karakteristike zajedničke za skup povezanih elemenata. Zatim možete naslijediti od njega i kreirati dodatne klase za koje možete definirati dodatne karakteristike koje su im jedinstvene.

Glavna naslijeđena klasa u Javi naziva se superklasa Super. Poziva se klasa nasljeđivanja podklasa. Dakle, potklasa je specijalizirana verzija superklase koja nasljeđuje sva svojstva superklase i dodaje svoje jedinstvene elemente.

Razmotrimo primjer opisa java klase "učenik Student, koji ima ime, prezime, godine i broj grupe. Kreiraćemo studentsku klasu na osnovu super klase korisnika User, koja već ima definisano ime, prezime i godine:

Javna klasa User ( int age; String firstName; String prezime; // Constructor public User(int age, String firstName, String prezime) ( this.age = age; this.firstName = FirstName; this.prezime = LastName; ) )

Sada kreiramo posebnu klasu Student, koja nasljeđuje svojstva super klase. Kada nasljeđujete klasu, morate također nadjačati konstruktore roditeljske klase:

Javna klasa Student proširuje korisnika ( int grupa; // Konstruktor public Student(int age, string ime, string prezime) ( super(starost, ime, prezime); ) boolean isMyGroup(int g) ( return g == grupa; ) )

Ključna riječ produžava pokazuje da nasljeđujemo klasu User.

Ključna riječ super

U konstruktoru klase Student, mi zovemo konstruktor roditeljske klase preko operatora Super, proslijeđujući mu cijeli potrebni skup parametara. U Javi ključna riječ Super označava superklasu, tj. Klasa iz koje proizlazi trenutna klasa. Ključna riječ super može se koristiti za pozivanje konstruktora superklase i za pristup članu superklase skrivenom od strane člana potklase.

Da vidimo kako se to dešava nasleđe u smislu kreiranja objekata:

Student student = novi student(18, "Kisa", "Vorobyaninov", 221);

Prvo se otvara konstruktor klase Student, zatim se poziva konstruktor nadklase User, a zatim se izvode preostale operacije u konstruktoru Student. Ovaj slijed radnji je sasvim logičan i omogućava vam stvaranje složenijih objekata na temelju jednostavnijih.

Superklasa može imati višestruke preopterećene verzije svojih konstruktora, tako da se metoda super() može pozvati s različitim parametrima. Program će izvršiti konstruktor koji odgovara navedenim argumentima.

Drugi oblik ključne riječi Super djeluje kao ključna riječ ovo, samo u ovom slučaju uvijek se pozivamo na superklasu potklase u kojoj se koristi. Opšti oblik je sljedeći:

Ovdje član može biti metoda ili varijabla instance. Ovaj obrazac je prikladan u slučajevima kada imena članova potklase skrivaju članove nadklase sa istim imenima.

Klasa A ( int i; ) // nasljeđuje od klase A klasa B proširuje A ( int i; // ime varijable odgovara i skriva varijablu i u klasi A B(int a, int b) ( super.i = a; // pristup na varijablu i iz klase A i = b; // pristup varijabli i iz klase B ) void show() ( System.out.println("i iz superklase je " + super.i); System.out.println(" i u podklasi je " + i); ) ) klasa MainActivity ( B podklasa = novo B(1, 2); subClass.show(); )

Kao rezultat, trebali bismo vidjeti u konzoli:

I iz nadklase je 1 i u potklasi je 2

Nadjačavanje metode, nadjačavanje

Ako se u hijerarhiji klasa ime i potpis tipa metode potklase poklapaju sa atributima metode nadklase, tada metoda potklase nadjačava metodu nadklase. Kada se zaobiđena metoda pozove iz njene podklase, ona će uvijek referencirati verziju te metode koju definira podklasa. I superklasna verzija metode će biti skrivena.

Ako trebate pristupiti verziji nadjačane metode definirane u superklasi, morate koristiti ključnu riječ Super.

Nemojte brkati nadjačavanje sa preopterećenjem. Nadjačavanje metode se događa samo ako su imena i potpisi tipa dvije metode identični. U suprotnom, ove dvije metode su jednostavno preopterećene.

Anotacija se pojavila u Javi SE5 @Override;. Ako trebate nadjačati metodu, koristite @Override i kompajler će izbaciti grešku ako je slučajno preopteretite umjesto da je nadjača.

U Javi možete naslijediti samo jednu klasu.

Enkapsulacija

U računarskoj nauci, enkapsulacija (latinski: en capsula) je pakovanje podataka i/ili funkcija u jedan objekat.

Osnova enkapsulacije u Javi je klasa. Enkapsulacija znači da polja objekta nisu direktno dostupna njegovim klijentima - skrivena su od direktnog pristupa izvana. Enkapsulacija štiti podatke objekta od neželjenog pristupa dozvoljavajući objektu da kontrolira pristup svojim podacima.

Modifikatori pristupa

Prilikom opisivanja klase koriste se modifikatori pristupa. Modifikatori pristupa može se posmatrati iz perspektive inkapsulacija tako i nasleđe. Kada se posmatra iz perspektive enkapsulacije, modifikatori pristupa vam omogućavaju da ograničite neželjeni pristup članovima klase izvana.

Javni članovi klase čine eksternu funkcionalnost koja je dostupna drugim klasama. Članovi koji su nezavisni od eksterne funkcionalnosti obično se proglašavaju privatnim, kao i pomoćne metode koje su samo detalji implementacije i nisu univerzalne prirode. Sakrivanjem implementacije klase, možete promijeniti unutrašnju logiku zasebne klase bez promjene koda drugih komponenti sistema.

Preporučljivo je koristiti pristup svojstvima klase samo preko njenih metoda (princip pasulj klase, "POJO"), koji vam omogućava da potvrdite vrijednosti polja, jer je direktan pristup svojstvima izuzetno teško pratiti, što znači da im se mogu dodijeliti pogrešne vrijednosti u fazi izvršavanja programa. Ovaj princip se odnosi na upravljanje inkapsuliranim podacima i omogućava vam da brzo promijenite način na koji se podaci pohranjuju. Ako se podaci ne pohranjuju u memoriju, već u fajlove ili bazu podataka, tada će biti potrebno promijeniti samo nekoliko metoda jedne klase, umjesto uvođenja ove funkcionalnosti u sve dijelove sistema.

Programski kod napisan po principu enkapsulacije je lakši za otklanjanje grešaka. Da bismo saznali u kom trenutku i ko je promijenio svojstvo objekta koji nas zanima, dovoljno je dodati izlaz informacije za otklanjanje grešaka u metodu objekta preko kojeg se pristupa svojstvu ovog objekta. Kada koristi direktan pristup svojstvima objekta, programer bi morao dodati izlaz informacija za otklanjanje grešaka u sve dijelove koda gdje se koristi objekt od interesa.

Primjer jednostavnog opisa robota

Javna klasa Robot ( private double x = 0; // Trenutna X koordinata private double y = 0; // Trenutna Y koordinata private double course = 0; // Trenutni kurs (u stupnjevima) public double getX() ( return x; ) public void setX(double x) ( this.x = x; ) public double getY() ( return y; ) public void setY(double y) ( this.y = y; ) public double getCourse() (vrati kurs; ) // Određivanje kursa public void setCourse(double course) ( this.course = course; ) // Prelazak na udaljenost public void forward(int distance) ( // Pristup polju objekta X x = x + distance * Math.cos ( tečaj / 180 * Math.PI); // Pristup polju objekta Y y = y + udaljenost * Math.sin(course / 180 * Math.PI); ) // Ispis koordinata robota public void printCoordinates() ( Sistem .out .println(x + "," + y); ) )

Prikazani primjer robota koristi skupove metoda počevši od set I dobiti. Ovaj par metoda se često naziva setter/getter. Ove metode se koriste za pristup poljima objekta. Nazivi metoda završavaju se imenom polja koje počinje VELIKIM slovom.

U metodama set propuštamo vrijednost kroz formalni parametar u proceduru. U kodu procedure dodjeljujemo vrijednost varijabli objekta/klase koristeći ključnu riječ ovo.

This.course = kurs ...

Upotreba ključnih riječi ovo neophodno, jer ime formalnog parametra poklapa se sa imenom varijable objekta. Da su imena drugačija, bilo bi moguće ovo nemojte koristiti.

Polimorfizam

Polimorfizam je jedan od osnovnih koncepata u objektno orijentiranom programiranju, zajedno sa nasljeđivanjem i enkapsulacijom. Riječ polimorfizam je grčkog porijekla i znači „imati mnogo oblika“. Da biste razumjeli šta znači polimorfizam u odnosu na objektno orijentirano programiranje, razmotrite primjer kreiranja uređivača vektorske grafike u kojem je potrebno koristiti određeni broj klasa u obliku skupa grafičkih primitiva - Square, Linija, Krug, Trougao, itd. Svaka od ovih klasa mora imati definiran metod izvuci da prikažete odgovarajući primitiv na ekranu.

Očigledno je da ćete morati da napišete neki kod koji će, da bi se prikazala slika, uzastopno iterirati kroz sve primitive koji treba da budu prikazani na ekranu i pozvati metod crtanja na svakom od njih.

Osoba koja nije upoznata sa polimorfizmom će najvjerovatnije kreirati nekoliko nizova: zaseban niz za svaki primitivni tip i napisati kod koji se ponavlja kroz elemente iz svakog niza uzastopno i poziva metodu draw za svaki element. Rezultat će biti otprilike sljedeći kod:

// Definiranje nizova grafičkih primitiva Square s = new Square ; Linija l = nova linija; Krug c = novi krug; Trougao t = novi trokut; // Popuni sve nizove odgovarajućim objektima. . . // Petlja prolazi kroz sve ćelije niza. za (int i = 0; i< s.length; i++){ // вызов метода draw() в случае, если ячейка не пустая. if (s[i] != null) s.draw(); } for(int i = 0; i < l.length; i++){ if (l[i] != null) l.draw(); } for(int i = 0; i < c.length; i++){ if (c[i] != null) c.draw(); } for(int i = 0; i < t.length; i++){ if (t[i] != null) t.draw(); }

Nedostatak koda koji je gore napisan je dupliciranje gotovo identičnog koda za prikaz svake vrste primitiva. Nezgodno je i to što ćemo daljom modernizacijom našeg grafičkog uređivača i dodavanjem mogućnosti crtanja novih tipova grafičkih primitiva, na primjer Text, Star, itd., ovim pristupom morati mijenjati postojeći kod i dodati definicije novih nizova na njega, kao i na obradu elemenata sadržanih u njima.

Koristeći polimorfizam, možete uvelike pojednostaviti implementaciju takve funkcionalnosti. Prije svega, napravimo zajedničku nadređenu klasu Shape za sve naše klase.

Javna klasa Shape ( public void draw() ( System.out.println("Stub"); ) )

Nakon toga kreiramo različite klase potomaka: kvadrat, linija, krug i trokut:

Javna klasa Point proširuje oblik ( public void draw() ( System.out.println("Kvadrat"); ) ) javna klasa Linija proširuje oblik ( public void draw() ( System.out.println("Linija"); ) ) javna klasa Krug proširuje oblik ( public void draw() ( System.out.println("Krug"); ) ) javna klasa Trougao proširuje oblik ( public void draw() ( System.out.println("Trokut"); ) )

U potomcima smo nadjačali metodu crtanja. Kao rezultat, dobili smo hijerarhiju klasa, koja je prikazana na slici.

Hajde sada da proverimo neverovatnu osobinu polimorfizma:

// Definiranje i inicijalizacija polja oblika a = novi oblik (novi oblik(), novi trokut(), novi kvadrat(), novi krug()); // Petlja kroz elemente niza for(int i = 0; i< a.length; i++) { a[i].draw(); }

Na konzoli će se ispisati sljedeći redovi:

Prazan trokut kvadratni krug

Na ovaj način, svaka klasa potomaka pozvala je svoj vlastiti metod crtanja, umjesto da poziva metodu crtanja iz nadređene klase Shape.

Polimorfizam je odredba teorije tipova, prema kojoj imena (na primjer, varijable) mogu označavati objekte različitih klasa, ali imaju zajedničkog roditelja. Prema tome, svaki objekat označen polimorfnim imenom može na svoj način odgovoriti na određeni opći skup operacija.

Preopterećenje metode, preopterećenje

U proceduralnom programiranju postoji i koncept polimorfizma, koji se razlikuje od razmatranog mehanizma u OOP-u. Proceduralni polimorfizam podrazumijeva mogućnost kreiranja nekoliko procedura ili funkcija sa istim imenom, ali različitim brojevima ili tipovima propuštenih parametara. Takve istoimene funkcije nazivaju se preopterećene, a sam fenomen se naziva preopterećenje. Preopterećenje funkcije također postoji u OOP-u i naziva se preopterećenje metoda. Primer upotrebe preopterećenja metoda u jeziku Java je klasa PrintWriter, koja se posebno koristi za štampanje poruka na konzoli. Ova klasa ima mnogo println metoda koje se razlikuju po tipovima i/ili broju ulaznih parametara. Evo samo neke od njih:

Void println() // idi na novi red void println(boolean x) // ispisuje vrijednost Booleove varijable (true ili false) void println(String x) // ispisuje string - vrijednost tekstualnog parametra

Polimorfizam je OOP princip koji vam omogućava da koristite jedno sučelje i različite algoritme. Cilj polimorfizma, primijenjen na OOP, je korištenje jednog imena za specificiranje različitih akcija. Izvršenje akcije će biti određeno tipom podataka.

Vrste polimorfizma:

Statičko (određeno u vrijeme kompajliranja). Preopterećenje funkcija, metoda, operatora itd.

Dinamički (određuje se u vremenu izvođenja). Sadrži virtualne funkcije i metode.

22. Nasljeđivanje kao mehanizam za implementaciju polimorfizma i stvaranje hijerarhije klasa. Vrste nasljeđivanja.

Nasljeđivanje je OOP mehanizam kroz koji se kreiraju nove klase na osnovu postojećih. Ove klase nasljeđuju svojstva i ponašanje osnovnih klasa i mogu steći nove. To vam omogućava da smanjite veličinu programa i vrijeme za njegov razvoj. Polimorfizam nam omogućava da pišemo programe za rukovanje širokim spektrom logički povezanih klasa. Nasljeđivanje i polimorfizam su efikasne tehnike za razvoj složenih programa.

Vrste nasljeđivanja: direktno i indirektno, jednostavno i višestruko.

23. Časovi. Osnovni, izvedeni, polimorfni, apstraktni, virtuelni. Primjeri.

Klasa je poseban tip podataka koji opisuje i atribute podataka i radnje koje se izvode na atributima.

Osnovna klasa je klasa čiji su članovi naslijeđeni.

Izvedena klasa je klasa koja nasljeđuje druge članove.

Polimorfna klasa je klasa koja sadrži virtuelne metode.

Apstraktna klasa je klasa koja sadrži čisto virtuelne metode.

Virtuelna klasa je klasa koja, tokom višestrukog nasljeđivanja, nije uključena u klase potomaka, ali je zamijenjena referencom u njima, kako bi se izbjeglo dupliciranje.

24. Principi ranog i kasnog uvezivanja.

Vezivanje je postupak za uspostavljanje veze između identifikatora koji se koristi u programskom kodu i njegovog fizičkog objekta (općenito, bilo koje softverske komponente: varijabla, procedura, modul, aplikacija itd.)

Rano uvezivanje je uspostavljanje takvih veza prije nego što program počne da se izvršava. Ovo obično znači povezivanje izvornih modula i povezivanje izvršnog modula sa objektnim modulima tokom procesa kompilacije.

Kasno povezivanje je uspostavljanje konekcije tokom izvršavanja programa. Obično govorimo ili o dinamičkim vezama (kada se samo tokom rada aplikacije određuje koji će objekti biti potrebni) ili o formiranju takvih objekata tokom rada.

25. Korištenje UML-a za specifikaciju

26. Opis hijerarhije klasa sa uml dijagramima.

Klasni odnosi kroz . I prikazati različite odnose: direktne, indirektne, višestruke.

27. Predlošci. Opis u uml.

Predložak klase je alat C++ jezika dizajniran za kodiranje generaliziranih algoritama klase, bez upućivanja na određene parametre (na primjer, tipovi podataka, veličine bafera, zadane vrijednosti).

sintaksa:

šablon

klasa NAME_CLASS

NAME_CLASS B; //Call

s_a_p 20. avgust 2008. u 19:09

Polimorfizam za početnike

  • PHP

Polimorfizam je jedna od tri glavne OOP paradigme. Ukratko, polimorfizam je sposobnost objekta da koristi metode izvedene klase koja ne postoji u vrijeme kada je osnovna stvorena. Za one koji nisu posebno upućeni u OOP, ovo vjerovatno zvuči komplikovano. Stoga, pogledajmo upotrebu polimorfizma na primjeru.

Formulacija problema

Pretpostavimo da su sajtu potrebne tri vrste publikacija - vesti, najave i članci. Oni su na neki način slični - svi imaju naslov i tekst, vijesti i najave imaju datum. Na neki način su različiti - članci imaju autore, vijesti imaju izvore, a najave imaju datum nakon kojeg postaje irelevantan.

Najjednostavnije opcije koje vam padaju na pamet su da napišete tri odvojene klase i radite s njima. Ili napišite jednu klasu koja će sadržavati sva svojstva svojstvena sve tri vrste publikacija, a koristit će se samo ona neophodna. Ali za različite tipove, metode koje su slične po logici trebale bi raditi drugačije. Pravljenje nekoliko metoda istog tipa za različite tipove (get_news, get_announcements, get_articles) je potpuno neznanje. Ovdje polimorfizam dobro dolazi.

Apstraktna klasa

Grubo govoreći, ovo je klasa šablona. Funkcionalnost implementira samo na nivou na kojem je trenutno poznata. Izvedene klase ga dopunjuju. Ali, vrijeme je da pređemo s teorije na praksu. Odmah da rezerviram: razmatramo primitivan primjer s minimalnom funkcionalnošću. Sva objašnjenja su u komentarima u kodu.

apstraktna klasa Publikacija
{
// tablica koja pohranjuje podatke o elementu
zaštićena $table ;

// svojstva elementa su nam nepoznata
protected $properties = array();

// konstruktor

{
// imajte na umu da ne znamo iz koje tablice trebamo dobiti podatke
$result = mysql_query ("SELECT * FROM `" . $this -> table . "` WHERE `id`="" . $id . "" LIMIT 1" );
// ne znamo ni koje smo podatke primili
$this -> svojstva = mysql_fetch_assoc ($rezultat);
}

// metoda, ista za bilo koju vrstu publikacije, vraća vrijednost svojstva
javna funkcija get_property ($name)
{
if (isset($this -> svojstva [ $name ]))
vrati $this -> svojstva [ $name ];

Vrati false ;
}

// metoda, ista za bilo koju vrstu publikacije, postavlja vrijednost svojstva
javna funkcija set_property ($name, $value)
{
if (!isset($this -> svojstva [ $name ]))
return false ;

$this -> svojstva [ $name ] = $vrijednost;

Povrat $value ;
}

// i ova metoda bi trebala ispisati publikaciju, ali ne znamo kako to točno učiniti, pa je proglašavamo apstraktnom
apstraktna javna funkcija do_print();
}

Izvedene klase

Sada možete preći na kreiranje izvedenih klasa koje implementiraju nedostajuću funkcionalnost.

razred Vijesti proširuju publikaciju
{
// konstruktor klase vijesti, izveden iz klase publications
javna funkcija __construct ($id)
{
// postavlja vrijednost tablice u kojoj se pohranjuju podaci o vijestima
$this -> table = "tabela vesti" ;
roditelj :: __construct ($id);
}

Javna funkcija do_print()
{
echo $this -> svojstva ["naslov"];
eho"

" ;
echo $this -> svojstva ["tekst"];
eho"
Izvor: " . $this -> svojstva [ "izvor" ];
}
}

Najava razreda produžava izdavanje
{
// konstruktor klase oglasa izvedene iz klase publikacije
javna funkcija __construct ($id)
{
// postavlja vrijednost tablice u kojoj se pohranjuju podaci o oglasu
$this -> table = "tabela_najave" ;
// pozivamo konstruktor roditeljske klase
roditelj :: __construct ($id);
}

// nadjačati apstraktnu metodu ispisa
javna funkcija do_print()
{
echo $this -> svojstva ["naslov"];
echo "
Pažnja! Oglas važi do "
. $this -> svojstva ["end_date" ];
eho"

" . $this -> svojstva [ "tekst" ];
}
}

Članak razreda proširuje publikaciju
{
// konstruktor klase article, izveden iz klase publikacije
javna funkcija __construct ($id)
{
// postavlja vrijednost tablice u kojoj se pohranjuju podaci o člancima
$this -> table = "tabela_članaka" ;
// pozivamo konstruktor roditeljske klase
roditelj :: __construct ($id);
}

// nadjačati apstraktnu metodu ispisa
javna funkcija do_print()
{
echo $this -> svojstva ["naslov"];
eho"

" ;
echo $this -> svojstva ["tekst"];
eho"
" . $this -> svojstva [ "autor" ];
}
}

Sada o upotrebi

Poenta je da se isti kod koristi za objekte različitih klasa.

// ispuniti niz publikacije objektima izvedenim iz publikacije
$publications = nove vijesti ($news_id);
$publications = nova najava($announcement_id);
$publications = novi članak($article_id);

Foreach ($publications kao $publication) (
// ako radimo s nasljednicima publikacije
if ($publication instanceof Publication) (
// zatim ispisujemo podatke
$publication -> do_print();
) drugo (
// rukovanje izuzetkom ili greškom
}
}

To je sve. Laganim pokretom ruke pantalone se pretvaraju u elegantne šorceve :-).

Glavna prednost polimorfizma je lakoća s kojom se mogu kreirati nove klase koje se ponašaju slično srodnim, što zauzvrat omogućava proširivost i modifikaciju. Članak pokazuje samo primitivan primjer, ali čak i on pokazuje kako upotreba apstrakcija može olakšati razvoj. Možemo raditi s vijestima kao što radimo s reklamama ili člancima, a ne moramo čak ni znati s čime radimo! U stvarnim, mnogo složenijim aplikacijama, ova prednost je još veća.

Malo teorije

  • Metode koje zahtijevaju nadjačavanje nazivaju se apstraktnim. Logično je da ako klasa sadrži barem jednu apstraktnu metodu, onda je i apstraktna.
  • Očigledno, objekat apstraktne klase ne može biti kreiran, inače ne bi bio apstraktan.
  • Izvedena klasa ima svojstva i metode koje pripadaju osnovnoj klasi, a može imati i svoje metode i svojstva.
  • Metoda koja je nadjačana u izvedenoj klasi naziva se virtuelna metoda. Nema informacija o ovoj metodi u osnovnoj apstraktnoj klasi.
  • Poenta apstrakcije je definirati metodu na mjestu gdje postoje najpotpunije informacije o tome kako bi trebao funkcionirati.
UPD:Što se tiče kršenja sql-inj i MVC-a - gospodo, ovo je samo primjer, i primjer polimorfizma, u kojem ne smatram potrebnim obraćati pažnju na ove stvari. Ovo je tema za potpuno različite članke.

Programiranje je proces razvoja rješenja za „žive“, dinamičke probleme u obliku krutih struktura koda, podataka, funkcija i algoritama. Procedura za formiranje stroge sintakse od nejasne semantike. Problemi iz stvarnog svijeta dobro su poznati veliki problem u algoritmizaciji: da bi se postiglo željeno rješenje, problem se mora smjestiti u precizne sintaktičke strukture.

OOP je dva puta pokušao da "razbije" ovaj drevni koncept programiranja, ali "okovi" klasičnog stila kodiranja podataka i algoritama su i dalje jaki.

Nivo i kvalifikacije

Računarska nauka je počela sa proračunima, ali brzina kojom se povećava ubrzanje kretanja u polje obrade informacija još nije dovoljno brza da klasično programiranje postane nemoguće i prestane postojati.

Također je objektivno da programer ne insistira, a kupac ne zahtijeva pravo rješenje za stvarne probleme. Obje strane su navikle da budu ograničene dostupnim alatima i poznatim mogućnostima.

Oblici OOP polimorfizma, ideje enkapsulacije koda i nasljeđivanja svojstava (metoda) leže u sferi programiranja, ali ne iu sferi problema koji se rješava.

Primjer za to je biblioteka PHPOffice/PHPWord. Da biste ga koristili, potrebne su vam kvalifikacije programera, potrebno je kreirati vlastiti sistem objekata, ali trenutni nivo korisnika (zahtjevi kupaca) je trivijalna kompozicija koju programer pokriva vlastitim razvojem (inače zahtjevi ne mogu biti zadovoljeni ). Situacija je otprilike ovakva:

U ovom slučaju, korištenje biblioteke je zadatak oblikovanja dokumenta, na primjer, diploma ili disertacija moraju biti oblikovani u skladu sa standardom. Kupac je izneo svoje zahteve, a programer je otišao mnogo dalje svojim putem.

Izvršeno je kompletno raščlanjivanje dokumenta, njegovo sklapanje u traženom formatu, rad sa tabelama bilo kojeg nivoa ugniježđenja, spajanje i dijeljenje ćelija, ispis u bilo kojem smjeru itd.

Polimorfizam i OOP

Ne mogu smisliti bolju definiciju polimorfizma nego da se pozovem na povijest razvoja ideje objektno orijentiranog programiranja, tako popularne danas, tako često korištene, ali nerealizovano u suštini i dalje jeste.

  • inkapsulacija;
  • polimorfizam;
  • nasleđe.

Neki dodaju i: apstrakcija, a najčešće se ova, i zaista glavna poenta, koristi kao temelj za opisivanje suštine OOP-a.

Dakle, mišljenja o OOP-u su polimorfna: opisuju jednu stvar, drugačije su dizajnirane, ili, obrnuto, opisuju različite stvari, ali se zasnivaju na četiri identične pozicije.

Demokratski princip nije karakterističan za oblast informacionih tehnologija, ali mu treba odati priznanje: kombinacija i koegzistencija mnogih mišljenja o istoj stvari pravi je polimorfizam na delu.

Popularne definicije polimorfizma

OOP je sljedeća faza u razvoju informacionih tehnologija. Malo ljudi raspravlja s tim, ali njegovi glavni aksiomi i odredbe se toliko razlikuju u smislu semantike da ne zaslužuju pažnju izvan svoje ukupnosti.

  1. Polimorfizam u programiranju je mogućnost da se obezbedi isti interfejs za različite osnovne oblike (tipove podataka).
  2. Polimorfizam je sposobnost objekata da imaju različite implementacije.
  3. Polimorfizam je sposobnost funkcije...
  4. Classic (od kreatora C/C++): „jedan interfejs - mnogo implementacija.”
  5. Parametarski polimorfizam znači...
  6. Polimorfizam je odredba teorije tipova...
  7. Apstrakcija je nemoguća bez inkapsulacije i nasljeđivanja, kao što je polimorfizam nemoguć bez nasljeđivanja...

Možemo se složiti da se sve ovo odnosi na isto: ali oblik izražavanja misli, suština i sadržaj nisu slični. Ali ipak postoji nešto zajedničko.

Subjekt: programer - kupac

Klasični razvoj programa pretpostavlja prisustvo programera i zadatka (klijent, kupac). Programer ispituje problem, formalizira ga i pravi kod koji vodi do rješenja. Kupac negira sve predloženo ili samo dio toga, ukazujući na nedostatke, a programer ponovo radi svoj posao.

Ovaj ciklus procesa rješavanja problema sugerira da se ovdje jasno kombinuju dva potpuno različita entiteta:

  • računar ne može sam da reši problem;
  • potreban je program kako bi računar mogao da „razume“ i „reši“ problem.

Zadatak je sfera kompetentnosti kupca, program je algoritam za "prilagođavanje" zadatka mogućnostima računara - sfera kompetencije programera. Uloga potonjeg je da „prilagodi” računar zahtjevima zadatka, a to je nepotrebno!

Ponude apstraktno. Postoje objekti - ovo je sfera kupca; postoji implementacija objekata - to je sfera programera. Ne postoji „tehnološka“ veza između kupca i programera. Ideja je radikalna, do danas nije realizovana, ali nešto već radi stabilno.

Prozori, dugmad i drugi objekti

Istorija Air Art Technology, Object Magazine, Turbo Vision, Graph Vision je već istorija. Malo ljudi se sjeća ovih implementacija OOP-a, one su praktički neiskorištene i zaboravljene, ali sučelje Windows prozora je poznato milionima korisnika, a objekte u PHP-u, JavaScript-u i drugim jezicima internetske tehnologije koriste stotine hiljada programera koda, i milioni posetilaca web resursa znaju za njih.

Ovo je vjerovatno jedini ispravan način na koji se OOP trebao razvijati: inkapsulacija, nasljeđivanje, polimorfizam za programera, ali ne i za korisnika. Karakteristično je da je ova pozicija bila glavna u razvoju vizuelnog dizajna (interfejsa) Windows softvera i aplikativnih programa kao što su Turbo Vision i Graph Vision.

Koncept proizvoda kao što su Air Art Technology i Object Magazine bio je značajno drugačiji. Ovdje je apstraktni objekt bio prvi predak informacijske strukture, enkapsulirajući kod za obradu informacija na apstraktnom nivou. Objekti prozora, dugmad i elementi vizualnog dizajna su ovdje bili sekundarni.

U prvoj verziji (Windows i sl.), OOP paradigma: enkapsulacija, nasljeđivanje, polimorfizam je označena na nivou apstraktnog pretka, a implementacija koda je formirana na nivou svakog konkretnog potomka duž naslijedne grane prema na potrebnu strukturu i sadržaj.

U drugoj opciji (The Air Art Technology and Object Magazine), nivo apstraktnog objekta je važan. Ono što će određeni potomak imati nije poenta, glavno je da njegova nasljedna grana zadovoljava zahtjeve svih roditelja sve do korijenske apstrakcije.

Objekt i sistem objekata: algoritam

Idealan objektno orijentisan koncept može samo da manipuliše objektima i sistemima objekata.

U savremenim programskim jezicima pod objektom (klasom) se obično podrazumijeva opis objekta i instanca objekta, a da bi se koristio opis objekta, jezici omogućavaju programeru rad sa statičnim objektima, dok dinamički objekat - opisi, sa svojim jedinstvenim sadržajem i strukturom, ali koristeći iste metode (osobine) opisa.

Trenutna praksa pojam objekta povezuje sa alatom, odnosno sa programskim jezikom, interfejsom, pristupom bazi podataka, mrežnom vezom, ali ništa ne ukazuje na interese korisnika, problem koji se rešava.

Ovo je idealno za jednostavan OOP: polimorfizam omogućava izradu, posebno, raznih elemenata dizajna, ali upravljanje njima istim kodom. Ali ovdje ne govorimo o objektima problema, koji se uopće ne razmatra kao predmet objektno orijentisane analize.

Programeri su usvojili OOP kao sredstvo za poboljšanje kvaliteta i produktivnosti svog rada, ali nisu ustupili ni djelić “svoje teritorije” kupcu. Osnovni koncepti OOP-a - inkapsulacija, nasljeđivanje, polimorfizam - ostali su u razvojnom području, a nisu transplantirani u područje zadataka.

Objekt i sistem objekata: problem i rješenje

Računar - programer - zadatak. Srednja veza je suvišna. U idealnom slučaju, trebalo bi da postoje samo dva, relativno zavisna, kola: (računar - programer) - zadatak. Odnosno, korisnik, kupac ili posjetitelj ima alat za rješavanje svog problema. Kupca nije briga kako je alat implementiran.

U idealnom slučaju, ovo je samo računar koji je u stanju da razume šta kupac želi i da radi ono što on želi. Kako će to izgledati: lokalni program ili web stranica dostupna preko pretraživača, poseban program za distribuiranu obradu informacija, informacioni sistem za kupca - nije važno.

Bitno je da nema nepotrebne veze između zadatka i kompjutera, već prvi razume i rešava drugi. Da bi se postigao ovaj cilj, računar i kupac moraju biti povezani jednim sistemom objekata, a značenje, strukturu i sadržaj svakog objekta određuje kupac, a metode i svojstva objekata implementira programer.

Idealno je kada se rad kupca na kreiranju sistema objekata koji mu je potreban i rad na implementaciji metoda i svojstava ovih objekata vremenski razdvoje. Što je implementacija sistema objekata (programer) udaljenija od njegovog semantičkog sadržaja (kupac), to je bolji kvalitet procesa.

Ništa ne sprečava kupca i programera da budu u interakciji u procesu rešavanja problema, ali je važno jasno razdvajanje semantike. Svako treba da gleda svoja posla, programer nije obavezan da savlada obim zadatka, a kupac ne treba da razume kod, i, štaviše, strane ne treba da daju jedni drugima savete o tome šta ih se ne tiče.

Tradicionalno i objektno programiranje

Osnovni postulati OOP-a: inkapsulacija, nasljeđivanje, polimorfizam u obliku u kojem su postali poznati i traženi, dovode do primjetnog poboljšanja kvalitete i pouzdanosti koda, značajno ubrzavaju rad programera i imaju mnogo drugih pozitivnih kvaliteta.

Ali stvari su još uvijek tu: klasično programiranje nije inferiorno u odnosu na svoje pozicije, a mnoge objektno orijentirane ideje implementirane su u klasičnom kodu.

Međutim, ideje OOP-a i rekurzije dovele su do adekvatnog uticaja na sintaksu klasičnih sintaksnih operatora, na logiku konstruisanja običnog koda koji nema nikakve veze sa objektno orijentisanim stilom pisanja i razmišljanja.

Transformirane su liste i redovi, pojavio se koncept prvog i posljednjeg elementa niza, pojavile su se petlje „za svaki“, a referentne opcije za imenovanje, korištenje i izvršavanje postale su još popularnije nego prije.

Zapravo, sama činjenica da su varijable izgubile svoje "jasno" lice (tip varijable se može mijenjati po potrebi, a varijablu uopće nije potrebno opisivati) govori da su klasici, zapravo, odavno postali objektni. orijentisao i prepoznao osnovne principe OOP-a: inkapsulaciju, nasljeđivanje, polimorfizam kao ideje od značajnog značaja.

Na čemu se zasniva: objektu ili sistemu?

Apstrakcija, kao glavna konceptualna pozicija OOP-a, bez obzira na to gdje se nalazi područje odgovornosti (implementacije) objekta - na nivou prvog apstraktnog objekta ili na nivou određenog potomka - ostavlja otvorenim pitanje: odakle sve započeti, od objekta ili od sistema?

Ako objekt stavite kao osnovu, onda on nikada neće postati sistem, jer će sistem biti unutar njega, a sam će postati kruta slika vrlo specifičnog početka. Ovdje nastaju problemi sa apstrakcijom: početni objekt precizno hvata glavnu stvar u problemu koji se rješava, odnosno više nije prenosiv na drugi problem.

Ako ga baziramo na sistemu objekata, dobićemo sistem sistema. To je teško zamisliti u odnosu na konkretan zadatak, a takođe je teško razumjeti gdje započeti razvoj. Uglavnom, polimorfizam OOP-a sa njegovim razlikama u entitetima, oblicima implementacije i broju stvarnih parametara u funkcijama daje ideju o sistemu koji leži na početku kao:

  • o opcijama za rješavanje problema (na primjer, meni);
  • o početnim uslovima (primjena problema u različitim uslovima, podaci);
  • o načinima rada (testiranje, podešavanje, rad).

Ali ovaj i slični ne daju osnova da se rješenje problema bazira na sistemu objekata. Često je dovoljno definirati jedan jedini početni objekt.

Istorija procesa rješavanja problema

Najvažniji principi OOP-a: polimorfizam i apstrakcija - dajte prioritet inicijalnom objektu kao sistemu objekata. U raspravi o tome šta prvo treba da bude, kokoška ili jaje, ovde kokoška pobeđuje.

Nema sumnje da sve mora početi od apstraktnog objekta, a ne od sistema objekata. Ali ako uzmemo u obzir faktor vremena i primenimo ga na nivou svakog objekta, počevši od prvog apstraktnog, onda je kontradiktorna ideja stavljanja i objekta i sistema na početak odluke jedino razumno.

Ako klasični koncept programiranja u toku rješavanja problema mijenja podatke, sadržaj baze podataka, mijenja datoteke itd., onda u OOP konceptu polimorfizam, enkapsulacija i vremenski faktor mijenjaju sadržaj, strukturu i svojstva sistema objekata problema koji se rješava.

Programera u OOP-u najmanje zanima koncept fajla, baze podataka, algoritma - to su pojedinosti; ovdje programer misli u objektima, ali objekti postoje u vremenu i mijenjaju se u toku postizanja željenog.

Dakle, na početku leži objekat kao sistem objekata i logika ovog sistema – vremenska skala: pokretanje zadatka, formiranje prvog objekta, unos ili prikupljanje podataka, formiranje sledećeg objekta, ali ništa ne sprečava prvi objekat da prelazimo na sljedeće rješenje.

Svaki nivo objekata djeluje kao samostalan sistem objekata, odnosno jedan je objekt, ali u kontekstu započetog procesa i značenja vremena, to je sistem objekata na vremenskoj skali. Za potpunu implementaciju OOP-a, polimorfizam, nasljeđivanje i faktor vremena zajedno osiguravaju dinamiku prvog, odnosno objekat ne samo da se može mijenjati tokom vremena, već i generirati objekte koje nije namijenio programer, generirane izvršavanjem zadatak tokom procesa, dizajniran od strane kupca.

Pravi OOP polimorfizam, primjer

Složenost problema koje OOP može da uradi nije uporediva sa onim što je moguće sa klasičnom verzijom pisanja programa. Naravno, svaki problem je uvijek moguće riješiti na uobičajen način, ali pitanje koliko će to „koštati“ vremena i truda često čini rezultat beskorisnim.

Biblioteka PHPOffice/PHPWord je razvijena ne tako davno, ali da biste koristili njene mogućnosti, skoro uvek morate da kreirate sopstveni sistem objekata. Na primjer, jednostavna *.docx datoteka:

je zip arhiva mnogih datoteka i fascikli u Office Open XML formatu (OpenXML, OOXML). Svaki fajl je napisan u XML tagovima, a prilikom dodavanja, menjanja i brisanja slova, reči, tabela, lista i drugih elemenata, sadržaj fajlova počinje da predstavlja niz oznaka koje ne sadrže uvek kompletne elemente; često je jedan element napisano sa mnogo oznaka.

Ako zamislite ovaj fajl kao niz oznaka, dobićete zanimljivu sliku:

Lako je primijetiti da je prvi i jedini pasus dokumenta predstavljen sa mnogo oznaka. Što se tiče tabele i tabela ugrađenih u nju, volumen opisa svih elemenata se ne može uočiti, ali je dostupan objektno orijentisanoj aplikaciji.

U stvari, na slici, zelena je testni izlaz oznaka, žuta su parametri i tip oznake, a bež je sadržaj. Kreirani objekti su orijentisani na mašinsku obradu. Samo operacije otvaranja datoteke dokumenta, formatiranja i pisanja istog postaju dostupne osobi.

Rješenje je jednostavno i praktično, ali je implementacija više orijentirana na kompjuter nego na čovjeka zbog obima izvedenih funkcionalnosti i složenih odnosa između objekata.

Država OOP područja

Razvoj sistema za upravljanje web stranicama, tehnologija za postavljanje i upravljanje serverima, te iskustvo u razvoju dinamičkih web stranica učinili su objektno orijentirano programiranje dostupnim svima. Problem je kako promijeniti svoje razmišljanje i naviknuti se na razmišljanje na nivou objekata, a ne u kontekstu sekvencijalno izvršavanog koda.

Tipično, prijelaz sa klasičnog programiranja na objektno orijentirano programiranje traje dva do tri mjeseca, ali troškovi su više nego vrijedni. Potencijal savremenih programskih jezika, prvenstveno PHP i JavaScript, zadovoljiće i najsofisticiranije programere.

Moderni OOP - polimorfizam, nasljeđivanje i sposobnost formiranja svojstava objekta - su praktični i praktični, sintaksa jezika i pomoćni alati osiguravaju jednostavnost korištenja i efikasnost koda.

Pogled na ideju objekta

Prilično je teško reći koliko će klasično programiranje trajati i kako će se OOP razvijati. Očigledno, programeri alata ne planiraju da uzmu u obzir kontekst potrošača (korisnika, kupca).

OOP alati - polimorfizam, nasljeđivanje, enkapsulacija i apstrakcija - orijentirani su na programere.

Moderni informacijski sustavi i web resursi nastoje odraziti stvarnost, osigurati funkcioniranje stvarnih objekata i stvoriti okruženje za njihovo funkcioniranje koje je toliko jednostavno da će biti dostupno potrošaču koji je daleko od programiranja i potpuno uronjen u svoje područje. kompetencije.

Najbolji članci na ovu temu