Oop klase. Objektno orijentisano programiranje

Uslovi "objekat" i "klasa" svima su poznati. Međutim, za informatičare oni imaju svoj podtekst. Ovo su osnovni koncepti objektno orijentisanog programiranja. Klase su tip podataka koji definiše programer, koji karakteriše način na koji se prenose i čuvaju, profil upotrebe i skup radnji koje se mogu izvršiti sa njima. Razlikuju se po tome što se mogu implementirati kao interfejs.

Šta je OOP (Objektno orijentisano programiranje)

Iskusni programeri dobro poznaju COBOL i C jezike. Programi napisani na njima bili su niz detaljnih uputa. Koristili su procedure i funkcije kako bi program učinili modularnim. Ova paradigma bila je usmjerena na logiku, a ne na podatke i na metode njihovog kombiniranja.

Objektno orijentisane klase programiranja

Savremeni programski jezici Delphi, Java, C# i drugi prate objektno orijentisani pristup. At u isto vrijeme, važnost daje se podacima, a ne samo za pisanje uputstava za zadatak. Objekat je stvar ili ideja koju želite da modelirate. Oni mogu biti bilo šta, na primer, zaposleni, bankovni račun, automobil, razni nameštaj i tako dalje.

Koncept objektno orijentisanog programiranja (OOP) inherentno je povezan sa sljedećim kriterijima:

  • Apstrakcija.
  • Inkapsulacija.
  • Nasljedstvo.
  • Polimorfizam.

Pogledajmo svaki od njih detaljnije.

Apstrakcija

Ovaj kriterijum vam omogućava da se fokusirate na ono što sam objekat radi, ali ne i na to kako se ove radnje implementiraju u programiranje. OOP implicira da je apstrakcija poznavanje maksimalne količine podataka o objektu. Pomaže u stvaranju nezavisnih modula koji na neki način mogu da komuniciraju jedni sa drugima.

Trudimo se da se selektivno fokusiramo samo na one stvari koje su nam važne (u životu) ili za naš modul (u programiranju). Promjena jednog nezavisnog modula ne utiče na druge. Jedina stvar moramo znati, - je ono što nam on daje. Osoba koja koristi ovaj modul ne mora da brine o tome kako je zadatak rešen, šta se tačno dešava u pozadini.

Konstruktor C klase

Svakodnevni predmeti koje koristimo imaju apstrakcije primijenjene na različitim nivoima. Jedan primer objektno orijentisanog programiranja je primena kočenja u automobilu. Ovaj sistem je apstraktan: dovoljno je da vozač pritisne pedalu tako da vozilo uspori i zaustavi. Promjene u sistemu ubrzanja ne utiču na kočioni sistem, jer su nezavisni. Vozač ne mora razumjeti unutrašnji rad kočnica. Od njega se traži samo da na vrijeme pritisne pedalu. U tom slučaju će kočnica (i disk i bubanj) raditi, a automobil će usporiti brzinu.

Inkapsulacija

Ovaj koncept je usko povezan sa apstrakcijom. Inkapsulacija je otkrivanje rješenja za problem, to ne zahtijeva od korisnika da u potpunosti razumije njegovo predmetno područje. Veže podatke i ponašanje u jednu cjelinu i ne dozvoljava klijentu ili korisniku modula da nauči o internom zastupljenosti u kojem se provodi ponašanje apstrakcije.

Objektno orijentisani programski sistem

Podaci. nije direktno dostupan, pristupa mu se putem određenih funkcija. Sakrivanje unutrašnjih elemenata objekta štiti njegov integritet, sprečavajući korisnike da prenose interne podatke komponente u nevažeće ili nekompatibilno stanje.

Nasljedstvo

Ovo je mehanizam za ponovnu upotrebu koda koji može pomoći u smanjenju njegovog umnožavanja. Ovaj koncept je moćna karakteristika objektno orijentisanih programskih jezika. Pomaže u organizaciji nastave u hijerarhiju, omogućavajući im da naslijede atribute i ponašanje iz gore navedenih komponenti.

Primer nasleđivanja: papagaj je ptica, Ruska rublja je vrsta valute. Međutim, fraza "banka je račun u banci" nije tačno. Ova veza je očigledna kada je potrebno opisati neki entitet u datoj Izjavi o problemu. Nasljeđivanje se može koristiti za definiranje opće implementacije OOP-a i njegovog ponašanja, a zatim za specijalizovane klase da redefiniraju ili promijene ove pokazatelje u nešto konkretnije. Nasljeđivanje ne radi unazad. Izvor (takozvani roditelj) neće imati svojstva izvedene (podređena klasa).

Važno je napomenuti da kada pokušavate modelirati rješenje, ne vrijedi dodavati više nivoa nasljeđivanja. Morate pokušati definirati zajedničke atribute i ponašanje u objektima koji su modelirani. Zatim, na osnovu ovoga, možete nastaviti s pravljenjem koda koji definira odgovarajuću roditeljsku klasu. Ukupna implementacija se može useliti u njega.

Polimorfizam

Ovaj koncept omogućava proširenje računarskih sistema stvaranjem novih specijalizovanih objekata. Istovremeno, omogućava trenutnoj verziji interakciju s novom, ne obraćajući pažnju na njena specifična svojstva.

Na primjer, ako je zadatak napisati poruku na komad papira, možete koristiti olovku, olovku, marker ili olovku. Dovoljno je da vam alat stane u ruku i da ima priliku da ostavi trag u kontaktu sa papirom. Ispada da određene radnje Osobe čine natpis na listu, a koji se alat koristi u ovom slučaju nije toliko važan za prenos informacija.

Drugi primjer polimorfizma u objektno orijentiranom programskom sistemu su avion i svemirski šatl, koji se mogu nazvati letećim objektima. Kako se tačno kreću u svemiru? Naravno, postoji velika razlika u njihovom radu. Odnosno, načini implementacije njihovih pokreta nisu isti. Međutim, sa stanovišta gledaoca, oba objekta lete.

Implementacija OOP-a

Nasljeđivanje je jedan od načina za postizanje polimorfizma, gdje se ponašanje definirano u naslijeđenoj klasi može nadjačati pisanjem prilagođene implementacije metode. Ovo se zove redefinicija (polimorfizam vremena kompajliranja).

Postoji još jedan oblik polimorfizma koji se zove preopterećenje, u kojoj nasljeđivanje se ne uzima u obzir. Naziv metode bit će isti, ali argumenti u metodi su različiti.

Karakteristike koncepata "klase" i "objekat"

Da bismo počeli da radimo sa objektno orijentisanim programiranjem, moramo da shvatimo šta su OOP klasa i objekat. Važno je razumjeti razliku između njih. Klasa je nacrt za kreiranje objekta. Definira atribute i ponašanje. Izgleda kao inženjerski crtež kuće. Objekat je instanca klase. To je razlika između njih. Primer ispod pokazuje kako je klasa deklarisana "TForml" i varijabla "Forml" na programski jezik Delphi:

typeTForml =klasa(TForm)Buttonl: TButton;procedura ButtonlClick(Pošiljalac: TObject);završava;varForml: TForml;

Ako želimo da modeliramo automobil u našem programu, Na primjer, moramo odredite njegovo atributi: model, gorivo, Marka, boja, , njegovo ponašanje, , kao i takozvane metode: pokretanje motora, kočenje, ubrzanje itd. Jasno se vidi da su ovi pokazatelji tipični ne samo za jednu marku ili model vehicle.

Objektno orijentisanim pristupom pokušavamo generalizirati naš objekt (mašinu) tvrdeći da će onaj koji ćemo modelirati u našem programu imati određeni broj atributa i metoda. Možda postoje i drugi indikatori i karakteristike vozila, ali oni su dovoljni da shvatimo kako klasa funkcioniše u PLO.

Kada koristimo ove podatke, kreiramo automobil sa određenim parametrima. Programiranjem istog objekta (mašine) možemo uzeti različite karakteristike, kao što je prikazano u donjoj tabeli:

Objekat 1Objekat 2
Model: VAZ 2107Model: VAZ 2109
gorivo: benzinGorivo: Dizel
boja: crvenaBoja: Zelena
Metoda pokretanja motora: Start () metoda pokretanja motora: Start ()
Način kočenja: prekid ()Način kočenja: prekid ()
Način ubrzanja: ubrzanje ()Način ubrzanja: ubrzanje ()

Dakle, Objektno orijentisano programiranje olakšava modeliranje ponašanja složenog sistema iz stvarnog svijeta. Sa OOP-om, podaci i funkcije (atributi i metode) su kombinovani u objektu. Ovo sprečava potrebu za bilo kakvim zajedničkim ili globalnim podacima sa OOP-om. Ovaj pristup je glavna razlika između objektno orijentisanog i proceduralnog pristupa.

Šta je klasa u OOP-u

OOP klase se sastoje od elemenata različitih tipova:

  1. Polja podataka: čuvajte stanje klase koristeći varijable i strukture.
  2. Metode: rutine za manipulaciju navedenim podacima.
  3. Neki jezici dozvoljavaju treći tip-svojstva. Ovo je nešto između prva dva.

Metode

Ponašanje klase ili njenih instanci određuje se metodama. Ovo su potprogrami sa mogućnošću rada na objektima. Ove operacije mogu promijeniti stanje objekta ili jednostavno pružiti načine za pristup.

Postoji mnogo metoda. Njihova podrška ovisi o jeziku. Neki se kreiraju i pozivaju programerskim kodom, drugi (posebni, kao što su konstruktori, destruktori i operatori konverzije) kreiraju se i pozivaju kodom koji generiše kompajler. Jezik može omogućiti programeru da definiše ove posebne metode.

Okruženje

Ovo je definicija grupe apstraktnih radnji. Saznaje kakvo ponašanje određeni predmet treba da pokaže bez preciziranja kako ga treba sprovesti.

Objekat može imati više uloga, a korisnici ga mogu koristiti iz različitih perspektiva. Na primjer, "objekat tipa osobe" može imati uloge:

  • Vojnik (sa ponašanjem "pucanja na neprijatelja").
  • Muž (sa ponašanjem "da voliš svoju ženu").
  • Poreski obveznik (sa ponašanjem "plaćanja poreza") i tako dalje.

Međutim, svaki predmet provodi svoje ponašanje na svoj način: miša plaća porez na vrijeme, Andrej kasni, a Petar to uopće ne čini. Isto se može reći i za svaki objekt i druge uloge.

Šta je OOP

Postavlja se pitanje zašto osnovna klasa svih objekata nije interfejs. Razlog je taj što će u ovom slučaju svaka klasa morati da sprovede malu, ali veoma važnu grupu metoda, što će oduzeti nepotrebno vreme. Ispostavilo se da nisu sve klase potrebna posebna implementacija - opšte default je dovoljno u većini slučajeva. Nema potrebe za redefiniranjem bilo kakvih metoda, ali ako situacija to zahtijeva, moguće je implementirati njihovu redefiniranje.

Dobar primjer su dugmad na prednjoj strani televizora. Možemo reći da su oni interfejs između korisnika i ožičenja na drugoj strani kućišta uređaja. Osoba pritiska dugme za uključivanje da uključi i isključi aparat. U ovom primjeru, određeni TV je instanca, svaka metoda je predstavljena dugmetom i zajedno čine interfejs. U svom najčešći u obliku je specifikacija grupe srodnih metoda bez njihove implementacije.

Dizajner

Ovaj kriterij je odgovoran za pripremu objekta za radnju, na primjer, za postavljanje početnih vrijednosti za sve njegove podatke i njihove elemente. Iako igra posebnu ulogu, konstruktor je samo još jedna funkcija koja se može koristiti za prenošenje informacija kroz listu argumenata. Mogu se koristiti za njegovu inicijalizaciju. Naziv funkcije konstruktora i klasa su isti.

Sljedeći primjer objašnjava koncept klase konstruktora U C++ (zajednički programski jezik):

#uključikoristećiubaci razmake std;klasaLinija{javno:voidsetLength(duplo len );duplogetLength(void);Linija();// Deklaracija konstruktoraprivatno:duplo dužina;};// Definicija funkcija, uključujući konstruktorLinija::Linija(void){cout <<"Objekat je napravljen"<< endl;}void Linija::setLength(duplo len ){dužina = len;}duplo Linija::getLength(void){keyboard label dužina;}//int programski organglavni(){Line line;// Dužina nizalinija.setLength(6.0);cout <<"Dužina linije : "<< linija.getLength()<<endl;keyboard label0;}

Kada se gornji kod kompajlira i izvrši, on daje sljedeći rezultat:

Objekat je napravljen

Dužina linije: 6

Destruktor

Ovo je posebna funkcija klase koja uništava objekt čim se njegov opseg završi. Kompajler automatski poziva Destruktor kada objekat izađe iz opsega.

Sintaksa za Destruktor je ista kao i za konstruktor, ali se naziv klase u ovom slučaju koristi za njega sa znakom tilde "~" kao prefiks.

Sljedeći primjer c++ objašnjava koncept destruktora:

#uključikoristećiubaci razmake std;klasaLinija{javno:voidsetLength(duplo len );duplogetLength(void);Linija();// Deklaracija konstruktora~Linija();// Deklaracija destruktoraprivatno:duplo dužina;}// Definicija funkcija, uključujući konstruktorLinija::Linija(void){cout <<"Objekat je napravljen"<< endl;}Linija::~Linija(void){cout <<"Objekat je obrisan"<< endl;}void Linija::setLength(duplo len ){dužina = len;}duplo Linija::getLength(void){keyboard label dužina;}//int programski organglavni(){Line line;// Dužina linijelinija.setLength(6.0);cout <<"Dužina linije : "<< linija.getLength()<<endl;keyboard label0;}

Kada se gornji kod kompajlira i izvrši, dat će sljedeći rezultat:

Objekat je napravljen

Dužina linije: 6

Objekat je obrisan

Koje su prednosti nastave

Prednosti organizacije software u objektnim klasama podijeljene su u tri kategorije:

  • Rapid development.
  • Jednostavno održavanje.
  • Ponovna upotreba koda i dizajna.
Osnovni koncepti objektno orijentisanog programiranja

Klase i OOP uopšte doprinose brzom razvoju jer smanjuju semantički jaz između koda i korisnika. Ovo su cijenili mnogi programeri. Zahvaljujući ovom sistemu, analitičari mogu da komuniciraju i sa programerima i sa korisnicima koristeći isti rečnik, govoreći o nalozima, klijentima, nalozima i tako dalje.

Klase objekata često doprinose brzom razvoju, budući da većina objektno orijentisanih okruženja ima moćne alate za otklanjanje grešaka i testiranje. Instance klasa se mogu proveriti tokom trajanja kako bi se uverili da sistem radi ispravno. Osim toga, umjesto dobijanja deponija osnovne memorije, većina objektno orijentisanih okruženja tumači mogućnosti otklanjanja grešaka. Kao rezultat toga, programeri mogu tačno analizirati gdje se greška dogodila u programu i vidjeti koje su metode, argumenti i vrijednosti korištene.