Programiranje 2
Elektrotehnički fakultet
Laboratorijske vježbe
Osijek Kneza Trpimira 2b
Vježba 12.
31000 Osijek
http://mfs.etfos.hr/programiranje2 www.etfos.hr 12. Osnove
objektno orijentiranog programiranja
Jezik C++ uvodi novi tip podatka: razrede ili klase (eng. class). Oni su temelj objektno orijentiranog programiranja. Objekt je naziv za skup svojstava koje možemo objediniti u smislenu cjelinu. Pravila koja propisuju od čega je pojedini objekt sagrađen te kakva su njegova svojstva nazivaju se klasama ili razredima. Klasa je samo opis a objekt je stvarna, konkretna realizacija napravljena na temelju razreda. Objekti međusobno izmjenjuju informacije i traže jedan od drugoga usluge. Pri tome okolina objekta ne mora ništa znati o njegovom unutrašnjem ustrojstvu. Svaki objekt ima javno sučelje (eng. public interface) kojim se definira njegova suradnja s okolinom. Objekt se može interno sastojati od niza drugih objekata i interakcija među njima. Način na koji se ostvaruje reprezentacija objekta je implementacija objekta (eng. implementation). Ona je najčešće skrivena od okoline kako bi se osigurala konzistentnost objekta. Klasa se sastoji od opisa javnog sučelja i implementacije koji zajedno čine enkapsulaciju (eng. encapsulation). Kada je klasa jednom definirana, pomoću nje se može konstruirati veliki broj objekata koji se onda mogu koristiti. DEKLARACIJA KLASE U C++ terminologiji klasa nije ništa drugo nego poseban tip podatka koji je potrebno deklarirati prije početka korištenja. Deklaracija se sastoji od dva dijela: zaglavlja i tijela. Zaglavlje se sastoji od ključne riječi class iza koje slijedi naziv razreda, a tijelo slijedi iza zaglavlja i omeđeno je parom vitičastih zagrada.
PRIMJER: class ime_klase { // ovdje se umeće tijelo klase }; Objekti se mogu stvoriti tako da se navedu ime razreda iza kojega se navedu imena objekata odvojena zarezima (kao deklaracija neke varijable). ime_klase obj1, obj2, obj3; Svaka klasa može sadržavati podatkovne članove, npr: class Prozor { int koordX1, koordY1, koordX2, koordY2; char *naziv; }; FUNKCIJSKI ČLANOVI Dok su podatkovni članovi klasa analogni članovima struktura, elementi klasa mogu biti i funkcijski članovi koji se još nazivaju metodama. Metode definiraju skup operacija koje se mogu obaviti na objektu. Uzmimo za primjer program koji intenzivno koristi vektorski račun. Svaki vektor se može prikazati jednim objektom klase Vektor. class Vektor { private: float ax, ay; public: void MnoziSkalarom(float skalar) { ax *= skalar; ay *= skalar; } };
Definicija jednog vektora i njegovo množenje skalarom onda izgleda ovako: Vektor v1; // .... v1.MnoziSkalarom(5.2);
PRIMJER KLASE ZA KOMPLEKSNE BROJEVE Napravit ćemo klasu koja će predstavljati kompleksni broj i u nju ugraditi javno sučelje kojim će se moći obavljati sve operacije s kompleksnim brojevima. class Kompleksni { private: float Re, Im; public: void Postavi(float x, float y) { Re = x; Im = y; } void Ispisi(Kompleksni z) { printf("%.2f + %.2f i\n", Re, Im); } void MnoziSkalarom(float skalar) { Re *= skalar; Im *= skalar; } Kompleksni & Zbroji(Kompleksni z1, Kompleksni z2) { Re = z1.Re + z2.Re; Im = z1.Im + z2.Im; return *this; } }; Zadatak za vježbu: 1. Nadopunite klasu Kompleksni tako da se mogu obavljati preostale operacije nad kompleksnim brojevima (dijeljenje skalarom, oduzimanje dva kompleksna broja, množenje
dva
kompleksna
broja,
dijeljenje
dva
kompleksan
broja,
modul
kompleksnog broja, argument – kut). Napisati i glavnu funkciju u kojoj će biti deklaracija nekoliko objekata i pozivanje operacija nad tim objektima.