530 likes | 720 Views
OBJEKTORIENTĒTĀS PARADIGMAS PAMATKONCEPTI:. KLASES. UN. OBJEKTI. TRĪS JAUTĀJUMI:. 1. Cik no auditorijā esošajiem varētu salikt mobilo tālruni no pilna detaļu komplekta? 2. Cik no auditorijā esošajiem varētu ieregulēt mobilo tālruni tā, lai tas kā modinātājs nozvanītu tieši 11:45?
E N D
OBJEKTORIENTĒTĀS PARADIGMAS PAMATKONCEPTI: KLASES UN OBJEKTI
TRĪS JAUTĀJUMI: 1. Cik no auditorijā esošajiem varētusalikt mobilo tālruni no pilna detaļu komplekta? 2. Cik no auditorijā esošajiem varētu ieregulēt mobilo tālruni tā, lai tas kāmodinātājs nozvanītu tieši 11:45? 3. Kā Jūs varat lietot mobilo tālruni, janezināt kā tieši tas uzbūvēts?
INTERFEISS (SASKARNE)Pazīstams un līdzīgs viena veida lietām • IMPLEMENTĀCIJASlēpta svešām acīm un varam atļauties par to neinteresēties, jo zinām, kādu efektu izraisīs katra mūsu darbība Auto Japāņu mikroshēmas
Klase apraksta gan datus, gan objektu izturēšanos ( procedurālajā pieejā bija viegli atrast tikai datu aprakstu).
Objekts satur šādu būtiskus aspektus: • Savu identitāti (var būt tik vien kā adrese atmiņā); • Atribūtus un to vērtības; • Klases izturēšanos (implementētāja skats); • Klases publisko saskarni (lietotāja skats).
Ja diviem vienas klases objektiem ir vienādas atribūtu vērtības, vai no tā var secināt, ka tas ir tas pats objekts?
OBJEKTI “Objekts ir klases instance. To viennozīmīgi identificē vārds un tam katru brīdi ir noteikts stāvoklis, ko nosaka tā atribūtu vērtības.” Vienkāršoti – arī parastu tipu mainīgo vērtību var saukt par stāvokli. Objekta stāvoklis mainās tikai tam pielietoto metožu rezultātā. Ar objekta izturēšanos mēs saprotam iespējamo objekta stāvokļu maiņas secību. “Objekta izturēšanos definē šim objektam pielietojamo metožu kopa.”
ZIŅOJUMI • Sadarbība notiek izsūtot ziņojumus. • “Ziņojums ir prasība objektam izpildīt vienu no tā metodēm. Tādējādi, ziņojums satur • metodes nosaukumu • metodes argumentu(s).” • Vesels_Skaitlis x; // Definē jaunu objektu x • x.piešķir(13); // Klau, x, pielieto sev metodi • // “piešķir” ar argumentu 13. • “Metode ir asociēta ar klasi. Objekts pielieto metodi reaģējot uz ziņojuma saņemšanu.”
ZIŅOJUMI Pieprasītājam ir jābūt saistītam ar objektu. Sūtītājs un saņēmējs. Kā pasta sūtījumi. “No kurienes šis sūtījums?” “Kas tev lika to darīt?” Var būt “naivs” un neinteresēties par sūtītāju. Kā ar e-pastu atvēršanu? Pieprasītājs NENOSAKA kodu, kas apstrādās ziņojumu. Līdzība un atšķirība no procedūrām. Viens un tas pats ziņojums var tikt izsūtīts dažāda tipa objektiem un izsaukt dažādas darbības. (Kā ar tālvadības pultīm?)
OO Programma • Programma ir objektu kopums (kopiena, zupa), kurā objekti • tiek veidoti, • tiek iznīcināti, • sadarbojas savā starpā. Kādas zemūdens pasaulesobjektu īpašības varamievērot?
OBJEKTU MIJIEDARBĪBA Objekts var saturēt citus objektus kā sastāvdaļas.
OBJEKTU MIJIEDARBĪBA Objekts var saturēt norādes (atsauces) uz citiem objektiem. Kā suņi pavadā?
OBJEKTU MIJIEDARBĪBA Ziņojuma parametrs var būt objekts. Objektu var atdot kā vērtību, atbildot uz ziņojumu.
OBJEKTU MIJIEDARBĪBA Objekts var sūtīt ziņojumus pats sev.
OBJEKTU MIJIEDARBĪBA Objekts var būt “redzams” globāli.
OBJEKTU MIJIEDARBĪBA “Dievveidīga” instance ir aizliegta! Labais stils – iztikt bez “Dievveidīgas” instances.
MIJIEDARBĪBA CILVĒKS Televizors ?
KAS IR OBJEKTI OOP ? • Fiziski objekti • Automašīnas satiksmes plūsmas simulācijā • Elektriskas komponentes shēmu projektēšanā • Valstis ekonomiskos modeļos • Lidmašīnas lidojumu vadības sistēmā
KAS IR OBJEKTI OOP ? • Datora-lietotāja vide • Logi • Izvēlnes • Grafiski objekti (taisnes, taisnstūri, apļi, ...) • Pele, klaviatūra, drukātājs, ...
KAS IR OBJEKTI OOP ? • Datu glabāšanas konstrukcijas • Pielāgoti masīvi • Steki • Saistīti saraksti • Binārie koki
KAS IR OBJEKTI OOP ? • Ar cilvēku saistīti jēdzieni • Darbinieki • Studenti • Pasūtītāji • Pārdevēji
KAS IR OBJEKTI OOP ? • Datu kolekcijas • Inventārs • Personīgā lieta • Vārdnīca • Pasaules valstu garumu un platumu tabula
KAS IR OBJEKTI OOP ? • Lietotāja definēti datu tipi • Laiks • Leņķi • Kompleksie skaitļi • Punkti plaknē
KAS IR OBJEKTI OOP ? • Datorspēlēs • Automašīna sacīkstēs • Pozīcija spēlē (šahs, dambrete) • Dzīvnieki ekoloģiskā simulācijā • Pretinieki un draugi piedzīvojumu spēlēs
KLASES UN OBJEKTI • Lidmašīna • Dators • Grāmata • Pasaka • Viktors • Mūžīgais dzinējs • “Trīs sivēntiņi” • Sportists • Pasaku grāmata • Basketbolists • Dators, uz kura tiek rādīta šī prezentācija
MANTOŠANA • Mantošana (angl.inheritance) ir mehānisms, kas ļauj klasei A mantot klases B īpašības. Tādējādi klases A objektam ir piekļuves tiesības klases B atribūtiem un metodēm, bez nepieciešamības tos pārdefinēt. • Ja klase A manto īpašības no klases B, tad saka, ka B ir A superklase jeb virsklase. Savukārt, A sauc par B apakšklasi. • Superklasi mēdz saukt arī par vecāku klasi. Apakšklasi sauc arī par bērnu klasi vai atvasināto klasi. • atvasinātajām klasēm atļauts pārrakstīt mantotās metodes
MANTOŠANA Vai vienmēr viss tik jauki? “Izmainīt garākās malas garumu tā, laimalu garumu attiecība būtu n.” “Piešķirt šaurajam leņķim vērtību alfa.”
DAUDZKĀRŠĀ MANTOŠANA • Ja klase A manto īpašības no vairākām klasēm (B1, B2, B3,..., Bn) tad ir darīšana ar daudzkāršo mantošanu. Tas var izraisīt nosaukumu konfliktus, ja vairāk kā vienai no A virsklasēm ir īpašības ar vienu un to pašu vārdu. • Atrisināšanas veidi: • virsklašu definēšanas kārtība nosaka to prioritātes. Pārējās kļūst “neredzamas”. • apakšklasei atklāti jāpasaka, kuras virsklases īpašību izmantot.
ABSTRAKTAS KLASES Klasi A sauc par abstraktu klasi, ja tā tiek lietota tikai kā citu klašu virsklase. Šāda klase tikai specificē īpašības. To nevar lietot objektu veidošanai. Atvasinātajām klasēm jādefinē A īpašības. Vai kāds ir redzējis dārzeni? Ogu?
ABSTRAKTAS KLASES Galvenokārt, lai strukturizētu mantošanas grafu. Virsklase ar funkciju Laukums(); r2 ab
ŠABLONU KLASES Klasi A sauc par šablona klasi, ja tā tiek parametrizēta ar datu tipu B. Veidojot A klases objektu, B tiek aizstāts ar aktuālo datu tipu. Tas ļauj definēt aktuālo klasi izmantojot šablona klasi un aktuālo datu tipu. Vilciens ar <kāda tipa> vagoniem Vilciens ar pasažieru vagoniem Vilciens ar kravas vagoniem
STATISKĀ SASAISTE Ja mainīgā tips T ir precīzi izteikts un viennozīmīgi sasaistīts ar tā vārdu V ar deklarācijas palīdzību, tad saka, ka V ir statiski saistīts ar T. Procesu sauc par statisko sasaisti. int i; .... i = “aaaa”; Cannot convert ‘char*’ to ‘int’
DINAMISKĀ SASAISTE Ir programmēšanas valodas, kur nevajag noteikt mainīgā tipu pirms tā izmantošanas. #D $A := 3; PRINT $A; $A := 'abrakadabra'; PRINT $A; #CALL_PAS(1); ## Ja mainīgā ar vārdu V tips T ir viennozīmīgi nosakāms pēc tā satura, tad saka, ka V ir dinamiski saistīts ar T. Procesu sauc par dinamisko sasaisti.
POLIMORFISMS Polimorfisms ļauj mainīgajam, funkcijai vai objektam pieņemt dažādas reprezentācijas. Polimorfismam var būt vairāki dažādi veidi. (saistīts ar dinamisko sasaisti) Mainīgā spēja izpildes laikā būt ar dažāda tipa vērtību tiek saukta par polimorfismu.
POLIMORFISMS (saistīts ar funkcijām) Ja funkciju (metodi) definē salikums funkcijas vārds + argumentu tipu saraksts, arī to sauc par polimorfismu. Var lietot vienu un to pašu funkcijas vārdu dažādiem parametru tipiem. int ir0 (int i) { return (i==0); } int ir0 (double d) { return ((d>-0.000001)&&(d<0.000001)); } Ja realizētas abas funkcijas, tad varam viegli nomainīt parametra tipu funkcijasir0 izsaukumā.
POLIMORFISMS • (saistīts ar objektiem un klasēm) Virsklašu objektu vietā var lietot to apakšklašu objektus. Apakšklašu operatoru un metožu izpildi var noteikt divos dažādos veidos: • balstoties uz objekta tipu, kas nozīmē, ka tiks izpildīta virsklases metode (operators, funkcija) • klasē “Paralelograms” aprakstīta funkcija “garākā diagonāle”. • d = Diagonāle(P); // P - Paralelograms • d = Diagonāle(T); // T - Taisnstūris • d = Diagonāle(K); // K - Kvadrāts
POLIMORFISMS • balstoties uz objekta saturu, kas nozīmē, ka tiks izpildīta attiecīgās apakšklases metode(operators, funkcija) • Šo izpildes veidu sauc par polimorfismu. • klasēs “Riņķis” un “Paralelograms” aprakstītas funkcijas “Laukums”. Abām klasēm varētu būt abstrakta virsklase, kurā specificēta metode “Laukums”. • l = T.Laukums; // T - taisnstūris • l = R.Laukums; // R - riņķis
POLIMORFISMS (C++ PIEMĒRS) #include "iostream.h" class A { public: virtual int f(void)=0;}; class B : public A { public: int f(void){return 1;}}; class C : public B { public: int f(void){return 2;}}; int kastasir(A* p) {return p->f();} int main(void) { B* b = new B(); C* c = new C(); cout << kastasir(b) << " " << kastasir(c) << "\n"; cout << b->f() << " " << c->f() << "\n"; return 0; } • 2 • 1 2
OOP mērķis Izveidot pēc iespējas autonomu sadarbojošos objektu pasauli. Atrisina dizaina tehnoloģija, ko sauc par atbildības vadītu izstrādi.
IZSTRĀDES PAMATS • Funkcijas • Datu struktūras • Izturēšanās
IZSTRĀDES PAMATS - IZTURĒŠANĀS Izstrādes tehniku, kas balstīta uz sistēmas izturēšanos, var pielietot daudz agrāk, kurpretī tehnikai, kas balstīta uz sistēmas strukturālām īpašībām, nepieciešama sīkāka iepriekšēja analīze. “Objektorientēta programmatūras izstrāde ir metode, kas programmatūras arhitektūru veido ņemot par pamatu objektus, ar kuriem darbojas katra sistēma vai apakšsistēma (nevis uz funkcijām, ko attiecīgajai sistēmai paredzēts veikt).” Atbildības vadīta izstrāde (Responsibility Driven Design) ir viena no OO izstrādes tehnikām.
ATBILDĪBAS VADĪTA IZSTRĀDE • Izstrādes tehnika, kurai ir sekojošas īpašības: • Nodarbojas ar neskaidrām un nepilnīgām specifikācijām • Dabā uzdevumu specifikācijas ir: • Neprecīzas (“pievienojiet sāli pēc garšas”) • Neskaidras • Divdomīgas • Dabiskā lietu virzība ir no analīzes uz risinājumu. Izstrādā sistēmas izturēšanās scenārijus. • Viegli integrē dažādos programmnodrošinājuma izstrādes aspektus
ATBILDĪBAS VADĪTA IZSTRĀDE Atbildība ietver sevī neiejaukšanos. No ... līdz ...
PROGRAMMNODROŠINĀJUMA KOMPONENTES • Zināms, ka sistēma sastāv no komponentēm. • Programmnodrošinājuma komponente ir abstrakta dizaina vienība ar kuru var asociēt dažādu uzdevumu veikšanas pienākumus. • Var tikt pārveidoti par funkciju, moduli, klasi, vai ko citu. • Komponentei jābūt atbildīgai par nelielu labi definētu uzdevumu kopu. • Komponentei jāsadarbojas ar citām komponentēm pēc iespējas mazā apjomā. • Kaut kur dzirdēti principi? • Komponente ar vienu darbību funkcija • Komponente ar vairākām darbībām klase
PROGRAMMNODROŠINĀJUMA KOMPONENTES • Programmnodrošinājuma komponenti raksturo divi aspekti: • izturēšanās ir darbību kopums, ko komponente ir spējīga veikt. Pilnu šo darbību kopu sauc arī par protokolu • stāvoklis ir visas komponentes iekšienē esošās informācijas (datu vērtību) kopums • Izturēšanās un stāvoklis ir saistīti jēdzieni.