oops concepts c object oriented programming concept tutorial
Ovaj vodič objašnjava koncepte OOPS-a na jeziku C #. Možete naučiti o objektno orijentiranim principima programiranja poput polimorfizma, inkapsulacije, nasljeđivanja i apstrakcije:
Objektno orijentirano programiranje je programski model koji radi na principu koji se vrti oko objekata, a ne akcije ili logike. Omogućuje korisnicima stvaranje objekata na temelju zahtjeva, a zatim stvaranje metoda za rad s tim objektima.
Rad na tim objektima za postizanje željenog rezultata cilj je objektno orijentiranog programiranja.
=> Ovdje istražite cijelu seriju vodiča za obuku za C #
Revidirajmo neke koncepte koje smo naučili u našim ranijim tutorijalima !!
Prostor imena
Prostor imena u C # zbirka je klasa. Pruža strukturu koja čuva jedno ime klase odvojeno od drugog naziva klase deklarirajući ih u drugom prostoru imena. Kako se predavanja s istim nazivom ne bi međusobno sukobljavala.
Razred
Klasa je nacrt tipa podataka. To je zapravo zbirka predmeta. Sadrži objekte i definiciju operacije koju treba izvršiti na tom objektu.
Predmeti
Objekti su primjerci klase.
U našim prethodnim vodičima već smo detaljno naučili o klasi i objektima.
Što ćete naučiti:
OOPS koncepti na jeziku C #
Objektno orijentirano programiranje nudi nekoliko prednosti u odnosu na ostale modele programiranja poput:
- Precizan i jasan modularni pristup programima nudi lako razumijevanje i održavanje.
- Klase i objekti stvoreni u projektu mogu se koristiti u cijelom projektu.
- Modularni pristup omogućuje neovisno postojanje različitih modula, čime nekoliko različitih programera omogućuje zajednički rad na različitim modulima.
U ovom uputstvu usredotočit ćemo se više na ostale glavne OOPS koncepte:
- Kapsulacija
- Polimorfizam
- Nasljeđivanje
- Apstrakcija
Kapsulacija
Inkapsulacija je objektno orijentirani koncept programiranja koji programerima omogućuje umotavanje podataka i isječaka koda unutar kućišta. Korištenjem programa enkapsulacije možete sakriti članove jednog razreda iz drugog razreda. To je poput okruživanja logičke stavke unutar paketa. Omogućuje samo relevantne informacije dostupne i vidljive izvana i to samo određenim članovima.
Inkapsulacija se provodi pomoću specifikatora pristupa. Specifikator pristupa koristi se za definiranje vidljivosti i pristupačnosti člana klase u C #.
C # sadrži sljedeće specifikatore pristupa.
gdje besplatno gledati anime na mreži
- Javnost
- Privatna
- Zaštićen
- Interno
Specifikatori pristupa definiraju vidljivost klase i njezine vrijednosti. Omogućuje vam da podatke učinite vidljivima za određeni dio koda i sakrijete ih od drugog dijela. Najčešće korištena vidljivost je javna i privatna.
Pogledajmo ih.
Javnost: Ključna riječ public omogućuje svojim članovima vidljivost s bilo kojeg mjesta u projektu. Ovaj specifikator pristupa ima najmanje ograničenja vidljivosti.
Privatna: Privatnim članovima može pristupiti samo član iz iste klase. Ovo je jedna od najograničenijih vidljivosti.
Zaštićen: Zaštićena pristupačnost omogućava članu pristup iz klase i iz druge klase koja nasljeđuje ovu klasu.
Interno: Interna pruža pristup unutar projekta. Još jedna slična unutarnja dostupnost je zaštićena interna. To omogućuje isto što i interno, a jedina je razlika u tome što podređena klasa može naslijediti ovu klasu i doći do njezinih članova čak i iz drugog projekta.
Polimorfizam
Polimorfizam je izveden iz grčkog rječnika, znači onaj s mnogo oblika. Poly označava mnoge, a Morph znači forme. Omogućuje klasi u C # da ima više implementacija s istim imenom.
Polimorfizam se u osnovi dijeli na dva dijela:
- Kompilacijski polimorfizam
- Polimorfizam vremena izvođenja
# 1) Statički ili vremenski sastavljeni polimorfizam
Polimorfizam kompilacije poznat je i kao statički polimorfizam. Preopterećenje metoda jedan je od načina na koji se postiže polimorfizam vremena kompajliranja. Poznat je kao polimorfizam vremena kompajliranja jer se odluka o pozivu metode donosi u vrijeme sastavljanja.
To se postiže održavanjem naziva metode istim, ali dodavanjem različitih skupova parametara. U preopterećenju metode, sustav prvo provjerava upotrijebljeni parametar i na temelju skupa parametara odlučuje pozvati odgovarajuću metodu.
Primjer:
class Program { void print(int i, int j) { Console.WriteLine('Printing int: {0}', (i+j) ); } void print(string a, string b) { Console.WriteLine('Printing String: ' , (a+b)); } static void Main(string() args) { Program prog = new Program(); // Call print for sum of integers prog.print(5, 6); // Call to concatenate strings prog.print('Hello','World'); Console.ReadKey(); } }
U gornjem primjeru istu smo metodu dvaput nazvali 'print' koristeći različite parametre. Isprva prosljeđujemo dvije cijele brojeve kao parametre, zatim smo proslijedili dva niza kao parametre. Postoje dvije metode 'ispisa' s istim nazivom.
Kad proslijedimo parametar sa sustavom cijelih brojeva, tražit će metodu nazvanu 'print' koja prihvaća dva cijela broja i izvršit će je ignorirajući druge metode s istim imenom.
U drugom smo dijelu proslijedili niz parametara. Ponovno će sustav tražiti metodu koja prihvaća dva parametra niza. Stoga će, na temelju proslijeđenih parametara, prva metoda dodati dvije cijele vrijednosti, a sljedeća će spojiti dva niza.
# 2) Dinamični polimorfizam ili runtime polimorfizam
Izvršni polimorfizam ili dinamički polimorfizam javlja se kada i ime metode i potpis metode imaju isto ime i parametre. Nadjačavanje metode je primjer dinamičkog polimorfizma. Omogućuje korisniku stvaranje apstraktne klase s djelomičnom implementacijom sučelja.
Nadjačavanje metode postiže se nasljeđivanjem. Da bi se postigla metoda koja prevladava i osnovna i izvedena klasa trebaju imati isto ime i parametar. Tijekom vremena kompajliranja kompajler ne može prepoznati metodu nadjačavanja, stoga ne dovodi do pogreške. Odluka o pokretanju metode donosi se tijekom izvođenja.
Primjer:
class Program { public void print() { Console.WriteLine('Printing from class Program'); } } class Execute : Program { public void print() { Console.WriteLine('Printing from class Execute'); } public static void Main(string() args) { Execute exe = new Execute(); exe.print(); Console.ReadLine(); } }
Ako pokrenemo gornji program, dobit ćemo sljedeći izlaz:
Printing from class Execute
Iako je klasa Execute naslijedila sve metode klase Program, ali kada smo metodu nazvali print koja je prisutna u obje klase, metoda prisutna u podređenoj klasi nadjačat će metodu iz roditeljske klase.
Dinamički polimorfizam koristi se za provođenje apstrakcije. Omogućuje korisniku da stvori apstraktnu klasu koja se koristi za pružanje implementacije za sučelje kada ga nasljeđuje izvedena klasa. Apstraktna klasa može sadržavati imena / potpis metoda, a izvedena klasa može imati specijaliziraniju definiciju metode.
Nasljeđivanje
Nasljeđivanje je važan dio koncepta OOPS-a. U nasljeđivanju definiramo klase roditelja i djece. Podređena klasa može naslijediti sve metode, objekte i svojstva nadređene klase. Dijete klasa također može imati vlastite metode i specifičnu provedbu.
Roditeljska klasa je također poznata kao osnovna klasa, a podređena klasa koja nasljeđuje osnovnu klasu također je poznata kao izvedena klasa.
Primjer:
class Program { public void print() { Console.WriteLine('Printing from class Program'); } } class Execute : Program { public static void Main(string() args) { Execute exe = new Execute(); exe.print(); Console.ReadLine(); } }
Ovdje imamo klasu nazvanu kao program koji ima jednu metodu. Imamo drugu klasu Execute koja nasljeđuje klasu Program. Klasa Execute izvedena je klasa, a program klase poznat je kao osnovna klasa.
Sada, umjesto da stvaramo objektnu instancu za program klase, stvorili smo objektnu instancu za klasu Execute. Korištenjem ove instance možemo pristupiti načinu ispisa iz osnovne klase.
Dakle, izlaz gornjeg koda bit će:
Printing from class Program
Izvedena klasa ne nasljeđuje samo metode, ona nasljeđuje i gotovo sve članove klase, poput polja, svojstava itd., Ovisno o vidljivosti. Nasljeđivanje u C # ne dopušta upotrebu više nasljeđa, tj. Jedna klasa ne može naslijediti iz nekoliko različitih klasa, međutim, jedna klasa može naslijediti iz druge klase koja može naslijediti iz druge klase.
Apstrakcija
Apstrakcija je jedno od glavnih načela objektno orijentiranog programiranja. Apstrakcija omogućuje programeru da svijetu prikaže samo potrebne detalje, dok ostale skriva. Apstrakcija se postiže u C # korištenjem klase Abstract i sučelja.
Klasa se može deklarirati kao apstraktna klasa pomoću ključne riječi 'Abstract'. Klasa Abstract u C # uvijek je osnovna klasa u hijerarhiji. Ono što ih čini drugačijima od druge klase jest to što ih se ne može instancirati. Apstraktnu klasu C # treba naslijediti.
Primjer:
class Program { static void Main(string() args) { Hyundai hyn = new Hyundai(); String descp = hyn.Describe(); Console.WriteLine(descp); Console.ReadKey(); } } abstract class Car { public void Describe() { return 'Description of the car'; } } class Hyundai : Car { }
Rezultat sljedećeg je:
Description of the car
Ako ga usporedite s našim prethodnim primjerima tijekom nasljeđivanja ili dinamičkog polimorfizma, tada ćete pronaći sličnosti. Najprepoznatljivija je razlika uporaba apstraktne ključne riječi prije klase Automobil. U slučaju da to želite poništiti ili pružiti vlastitu implementaciju sličnu onoj što smo radili u dinamičkom polimorfizmu. Tada to možete postići na sljedeći način.
class Program { static void Main(string() args) { Hyundai hyn = new Hyundai(); String descp = hyn.Describe(); Console.WriteLine(descp); Console.ReadKey(); } } abstract class Car { public virtual string Describe() { return 'Description of the car'; } } class Hyundai : Car { public override string Describe() { return 'Description of the car is now Hyundai'; } }
Dakle, ako sada izvršite ovaj kod, dat će sljedeći izlaz:
Description of the car is now Hyundai
Izvedena metoda klase nadjačava metodu osnovne klase. Na taj način možete stvoriti drugu izvedenu klasu kao što su Ferrari, Porsche, BMW itd. S vlastitim metodama implementacije.
Ako pažljivo pogledate, možete vidjeti da naša metoda opisa u apstraktnoj klasi ne sadrži nikakvu implementaciju.
Zašto onda definiramo prazne metode?
To je zato što klasa Abstract daje potpis metodama i obvezuje potklase da stvore implementaciju za sve ove metode. To omogućuje dijeljenje osnovne klase, ali istovremeno zadržava i provjeru provedbe metode izvedene klase.
Sučelje
U C #, sučelje je nacrt klase. Sučelje je slično apstraktnoj klasi i koristi se za postizanje stopostotne apstrakcije. Sve metode opisane unutar sučelja prema zadanim su postavkama apstraktne. Nema niti jedno tijelo metode i ne može se instancirati.
Sučelje se uglavnom koristi za postizanje višestrukog nasljeđivanja i potpune apstrakcije. Sav potpis metode deklariran unutar sučelja trebao bi imati izvedbu iz klase ili strukture koja ga implementira.
Primjer:
class Program { static void Main(string() args) { Hyundai hyn = new Hyundai(); String descp = hyn.Describe(); Console.WriteLine(descp); Console.ReadKey(); } } interface Car { string Describe(); } class Hyundai : Car { public string Describe() { return 'Description of the car is now Hyundai'; } }
Rezultat gornjeg koda bit će:
Description of the car is now Hyundai
Ovdje smo stvorili sučelje Car. Budući da sučelje ne može imati nikakvu definiciju metode, upravo smo naveli naziv metode i tip povratka u sučelju. Potom smo implementirali sučelje Car u drugu klasu Hyundaija. U implementiranoj klasi dali smo definiciju metoda definiranih unutar sučelja.
Zaključak
U konceptu objektno orijentiranog programiranja svaki dio programa tretira se kao objekt. Klasa je zbirka sličnih vrsta elemenata, a objekt je instanca klase.
Inkapsulacija u C # omogućuje korisniku da utvrdi vidljivost klase i njezinih članova. Polimorfizam omogućuje da metode imaju isto ime, ali s različitim parametrima unutar iste klase ili s istim parametrom u drugoj klasi.
Nasljeđivanje je kada podređena klasa koja je također poznata kao izvedena klasa nasljeđuje sva svojstva, uključujući metode, objekte, polja itd. Roditeljske klase koja je također poznata i kao osnovna klasa. Apstrakcija omogućuje programu da prikaže samo potpis dok skriva detalje o implementaciji.
Konsolidirani program
class Program { void print(int i, int j) { Console.WriteLine('Printing int: {0}', (i + j)); } void print(string a, string b) { Console.WriteLine('Printing String '+ a + b); } static void Main(string() args) { Program prog = new Program(); // Call print for sum of integers prog.print(5, 6); // Call to concatenate strings prog.print('Hello', 'World'); Hyundai hyn = new Hyundai(); String descp = hyn.Describe(); Console.WriteLine(descp); Console.ReadKey(); } } abstract class Car { public virtual string Describe() { return 'Description of the car'; } } class Hyundai : Car { public override string Describe() { return 'Description of the car is now Hyundai'; } }
=> Ovdje istražite cijelu seriju vodiča za obuku za C #
Preporučena literatura
- OOP Java: Uvod u objektno orijentirano programiranje na Javi
- Objektno orijentirano programiranje na jeziku C ++
- Vodič za cijevi za Unix: Cijevi za programiranje u Unixu
- Python DateTime Vodič s primjerima
- Spremište objekata u QTP-u - Vodič br. 22
- Python OOPs koncepti (klase Python, objekti i nasljeđivanje)
- QTP vodič # 7 - QTP-ova paradigma identifikacije objekata - Kako QTP jedinstveno identificira objekte?
- Naučite napredne koncepte skriptiranja za SoapUI Groovy - Tutorial br. 9 za SoapUI