1 / 25

Classes & objects – klase I objekti

Classes & objects – klase I objekti. Klasa je vezana za problematiku klasifikacije i apstrakcije jer defini še zajednička svojstva i funkcionalnosti velikog broja različitih objekata Ljudsko mišljenje se bazira na pojmovima koji se u softveru predstavljaju klasama

norah
Download Presentation

Classes & objects – klase I objekti

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Classes & objects – klase I objekti • Klasa je vezanazaproblematikuklasifikacije i apstrakcijejerdefiniše zajednička svojstva i funkcionalnosti velikog broja različitih objekata • Ljudsko mišljenje se bazira na pojmovima koji se u softveru predstavljaju klasama • Smisao svake klase je u tome da obuhvata različite objekte koji se sreću u realnosti • Ideja primene klasa u softveru je višestruka i svodi se na razne vrste pojednostavljenja • Pri modelovanju stvarnosti, tj. stvarnih problema za koje se piše softver, koriste se klase objekata koji zaiste postoje i koji su bitni za razmatranu problematiku • Klase omogućavaju kreiranje nezavisnih celina u softveru koje se po potrebi mogu menjati nezavisno od drugih delova softvera čime se olakšava održavanje i izmene što je neophodno u svakom softveru

  2. Enkapsulacija kao koncept kod klasa • Dve prethodno pomenute osnovne uloge klasa u razvoju savremenog softvera – modelovanje grupe srodnih objekata i modularnost u razvoju softvera se ogledaju u konceptu enkapsulacije • Klase se posmatraju kao celine koje se koriste na određeni način, pre svega korišćenjem funkcionalnosti klase koje su na raspolaganju • Pri tome nije bitna implementacija funkcija u klasi već korišćenje tih funkcija • Ukoliko je to potrebno, implementacija funkcija se može promeniti, a da način korišćenja klase ostane sasvim isti • Takođe, podaci koje klasa koristi mogu biti skriveni ili dostupni korisnicima samo preko funkcija koje se koriste za ažuriranje • Sakrivanje ovih informacija u samoj klasi predstavlja enkapsulaciju • Princip enkapsulacije je da se korisnicima klase otkrije samo neophodni minimum informacija o klasi koje su neophodne za uspešno korišćenje klase, tj. za ono za šta je klasa namenjena

  3. Jednostavna definicija klase • class Circle • { • double Area() • { • return Math.PI * radius * radius;//Math je statička klasa • } • int radius; • } • Ključna reč class se koristi kod definicije klase iza čega sledi naziv klase – Circle • Sve komponente klase – podaci (radius) i metode (Area) se nalaze unutar bloka koda kojim se definiše klasa

  4. Korišćenje klase – kreiranje objekata i rad sa objektima • Circle c; // Create a Circle variable • c = new Circle(); // Initialize it • c je objekat korisnički definisane klase Circle • Sa new se objekat klase –c inicijalizuje • Ključna reč new je neophodna zbog razlike u inicijalizaciji objekta i dodele vrednosti kod prostih tipova – objekat c nema prostu vrednost • Za c se može reći i da predstavlja objektnu promenljivu • Objekat predstavlja instancu – primerak date klase • Klasa je opšta definicija objekta, neka vrsta šablona na osnovu koga se može kreirati neograničen broj različitih objekata

  5. Private and public članovi klase • class Circle • { • public double Area() • { • return Math.PI * radius * radius; • } • private int radius; • } • Sa private i public se reguliše pravo korišćenja članova klase (podaci i metode) od strane korisnika klase (spoljašnji svet) • Članovi klase označeni sa private su nedostupni korisnicima klase, dok su članovi označeni sa public dostupni korisnicima klase • Unutar klase, svakom metodu klase su dostupni svi članovi klase bilo da su private ili public • Da bi se private podatak član radius mogao koristiti neophodno je modifikovati definiciju klase – promeniti private u public ili uraditi nešto drugo

  6. Preporučeno imenovanje klase i elemenata klase • Po pravilu se koriste mala slova za imenovanje identifikatora, dok se korišćenje velikih slova posebno naglašava • Ime klase treba da počinje sa velikim slovom – klasa Circle • Imena javnih – public članova klase treba da počinju sa velikim slovom – metod Area() • Imena privatnih članova klase treba da imaju sva mala slova – podatak radius tipa int • Privatni konstruktori klase koji predstavljaju metode moraju da imaju identično ime kao i klasa – dakle da počinju velikim slovom ipak, što je izuzetakodpravilazaimenovanjeprivatnihčlanovaklase, alisamo u tom slučaju– za privatne konstruktore klase

  7. Konstruktori klase • Objekti se kreiraju sa ključnom reči new • U memoriji se rezerviše prostor za objekat koji uključuje prostor za sve podatke članove – u zavisnosti od tipova podataka, posle čega se vrši inicijalizacija podataka članova • Inicijalizaciju podataka članova vrši konstruktor – specijalan metod klase koji ima potpuno isto ime kao i klasa, nema povratnu vrednost – čak ni void i može da bude preklopljen • Svaka klasa mora da ima konstruktor. Ako se ne definiše, automatski se kreira podrazumevani konstruktor

  8. Konstruktori klase • Umesto podrazumevanog konstruktora koji se automatski kreira, može da se definiše novi podrazumevani konstruktor kao javni metod koji ima isto ime kao i klasa, ne vraća vrednost i nema argumente • class Circle • { • public Circle() // default constructor • { • radius = 0; • } • public double Area() • { • return Math.PI * radius * radius; • } • private int radius; • }

  9. Preklapanje konstruktora • Circle c; // deklaracija objekta c • c = new Circle(); //kreiranje objekta c • double areaOfCircle = c.Area(); //poziv metoda Area • Promenljivoj areaOfCircle tipa double dodeljuje se vrednost koju vraća metod Area objekta c • Članovima klase – podacima i metodima se pristupa preko objekta korišćenjem operatora . (tačka) c.Area(); • Treba definisati još jedan konstruktor koji će podatak član radius inicijalizovati na neku željenu vrednost različitu od nule

  10. class Circle • { • public Circle() // default constructor • { • radius = 0; • } • public Circle(int initialRadius) // overloaded constructor • { • radius = initialRadius; • } • public double Area() • { • return Math.PI * radius * radius; • } • private int radius; • }

  11. Korišćenje preklopljenog konstruktora • Circle c; //deklaracija objekta • c = new Circle(45);//inicijalizacija objekta • Na osnovu poziva konstruktora – argumenata koji se navode, zna se koja se verzija preklopljenog konstruktora poziva • Ako korisnik eksplicitno definiše bilo koji konstruktor, onda se automatski ne kreira podrazumevani konstruktor, pa u tom slučaju mora da se eksplicitno definiše podrazumevani konstruktor (bez argumenata)

  12. Partial classes • Postoji mogućnost da se definicija klase podeli u više različitih file-ova • Definicija dela klase se označava sa ključnom reči partial • partial class Circle • { • public Circle() // default constructor • { • radius = 0; • } • public Circle(int initialRadius) // overloaded constructor • { • radius = initialRadius; • } • } • partial class Circle • { • public double Area() • { • return Math.PI * radius * radius; • } • private int radius; }

  13. Statički metodi i podaci • C# zahteva da se kod piše isključivo u klasi, tj. svi metodi moraju pripadati nekoj klasi • U nekim slučajevima nema mnogo smisla da se kreiraju objekti neke klase da bi se pozvali odgovarajući metodi preko objekata • Primer je klasa Math koja sadrži metode za razne matematičke funkcije • Očekivani poziv bi bio ovakav: • Math m = new Math(); • double d = m.Sqrt(42.24); • Poziv kvadratnog korena je preko objekta m - Math

  14. Statički metodi i podaci • Međutim, malo je neobično kreirati objekat tipa Math, iz prostog razloga što takav objekat nije potreban • Zato su sve metode za implementaciju matematičkih funkcija u klasi Math statičke, što znači da se mogu zvati direktno preko imena klase, bez potrebe da se kreiraju objekti klase • class Math • { • public static double Sqrt(double d) { ... } • ... • } • Znači, treba ovako: • double d = Math.Sqrt(42.24);

  15. Statički metodi i podaci • Statički metodi imaju pristup samo podacima članovima klase koji su takođe deklarisani kao statički • To je logično, jer podaci članovi koji nisu statički sadrže vrednosti koje pripadaju kreiranim objektima • Pošto se statički metodi mogu pozvati bez objekata, onda ne mogu ni da pristupe podacima koji nisu statički, jer nema objekta • Smisao statičkih podataka je da sadrže podatke na nivou klase, tj. podatke koji su deljeni između svih objekata – zajednički za sve objekte date klase

  16. class Circle • { • public Circle() // default constructor • { • radius = 0; • NumCircles++; • } • public Circle(int initialRadius) // overloaded constructor • { • radius = initialRadius; • NumCircles++; • } • ... • private int radius; • public static int NumCircles = 0; • } • Korišćenje – pristup statičkom podatku članu: • Console.WriteLine(“Number of Circle objects: {0}”, Circle.NumCircles);

  17. Statički metodi i podaci • Statički podaci mogu biti i konstantni, što znači da im se vrednost ne menja u toku izvršavanja programa • class Math • { • ... • public const double PI = 3.14159265358979323846; • } • Čitava klasa takođe može da bude statička što znači da može da ima samo statičke članove – podatke i metode • public static class Math • { • public static double Sin(double x) {...} • public static double Cos(double x) {...} • public static double Sqrt(double x) {...} • ... • }

  18. Anonimne klase • Anonimne klase – bez imena se implicitno deklarišu • var myAnonymousObject = new { Name = “John”, Age = 42 }; • Novoj klasi se ne zna ime, ima dva polja Name i Age • Var rešava problem nepoznavanja imena klase • Korišćenje objekta anonimne klase: • Console.WriteLine(“Name: {0} Age: {1}”, myAnonymousObject.Name, myAnonymousObject. • Age); • var anotherAnonymousObject = new { Name = “Diana”, Age = 43 ); • anotherAnonymousObject = myAnonymousObject;

  19. Ograničenja anonimnih klasa • Mogu da sadrže samo public podatke – promenljive • Podaci moraju biti inicijalizovani • Podaci ne mogu biti statički • Ne mogu da imaju metode

More Related