1 / 80

Objektorientētas programmēšanas pamati

Objektorientētas programmēšanas pamati. Objektorientētā programmēšana (OOP) - tā ir programmu izstrādāšanas metodika, kuras pamatā ir jēdziens objekts. Objekts - tas ir daža struktūra, kas ir attiecīga reālas pasaules objektam, viņa uzvedībai. Pamatjēdzieni un principi ООP.

abeni
Télécharger la présentation

Objektorientētas programmēšanas pamati

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. Objektorientētas programmēšanas pamati

  2. Objektorientētā programmēšana (OOP) - tā ir programmu izstrādāšanas metodika, kuras pamatā ir jēdziens objekts. Objekts - tas ir daža struktūra, kas ir attiecīga reālas pasaules objektam, viņa uzvedībai.

  3. Pamatjēdzieni un principi ООP. Objektorientētā programmēšana turas uz četriem pamatjēdzieniem: abstrakcija, pārmantojamība, iekapsulēšana un polimorfisms. Īsi apstāsimies uz katra no jēdzieniem.

  4. Abstrakcija Abstrakcija noslēdzas ārēju objekta īpašību priekšstatā bez viņa iekšējās organizācijas un konkrētas realizācijas uzskaites. Abstrakcija – tā ir programmēšanas valodas spēja aprakstīt apkārtējas pasaules objektus ietvaros liktā uzdevuma. Ar objektu, kurš ir pakļauts aprakstam, var būt viss ko vēlies: cilvēks, ēka, automobilis un tā tālāk. No redzes viedokļa konkrēta uzdevuma mūs parasti neinteresē visi objekta raksturojumi.

  5. Ja mēs aprakstām cilvēku kā bankas klientu ienešanas procesa automatizācijai uz kontu un dažu summu noņemšanu no konta, mēs diez vai interesēs tādas cilvēka īpašības, kā svaru, augšanu, rakstura tipu, acu un matu krāsu. Mums ievajadzēsies konta numurs, naudas daudzums, dati, kas apstiprina personību, mājas adresi u.t.t.

  6. Visticamāk, mēs nosauksim šo objektu «Klients», un ar zem tā apkopoto nosaukumu pacentīsimies vākt visus raksturojumus (īpašības) banku dokumentācijas pareizai noformēšanai. Bez tam, mēs pacentīsimies izcelt un nokārtot darbības, kuras notiek ar šo objektu noņemšanas vai ienešanasnaudas laikā, aprakstīsim visu to programmēšanas valodas termiņos.

  7. Rezultātā mēs saņemsim dažu klienta apkopoto tipu, kam ir parametru tipi, kuri ir kopīgi visiem klientiem, un mākošs izmainīt šos parametrus ar tēlu, kurš ir kopīgs visiem klientiem. Programmēšanas valodas spējapārvest reālas pasaules parādības abstraktos objektos ar to īpašībām un uzvedību (tas ir radīt klases) un dēvējas ar abstrakciju.

  8. Reālas pasaules jebkuru objektu pārvedumā programmēšanas valodas terminos parasti apraksta divas bāziskas lietas: • ka šis objekts no sevis iedomājas, kādi viņam ir esamas īpašības un kādā daudzumā. Ar citiem vārdiem pārrakstās objekta (dati var būt atšķirīgu tipu) dati un šie apraksti dēvējas ar objekta laukiem; • kā objekts uzvedas, kādas darbības viņš ir spējīgs veikt tajā vai citā situācijā, kā objekts var manipulēt ar savējiem laukiem, un kādas reakcijas uz ārējām īsziņām viņš var nodrošināt. Šīs darbības pārrakstās ar procedūrām un funkcijām, kuras saņēma nosaukumu objekta metodes.

  9. Pārmantojamība Pārmantojamību pārstāv objektu hierarhijas būves princips no kopīgāka un vienkārša pie daudz konkrētam un sarežģītam. Salīdzinot atšķirīgu reālu objektu īpašības, var izcelt īpašību grupu, kas ir vienādas tiem visiem.

  10. Tad ir jēgu radīt klasi-sencis (vecāki), kurā apvienot laukus un metodes, kas ir kopīgi atšķirīgiem objektiem, bet no šīs klases radīt citas klases ar savējo specifiku, pie tam katra radāmā klase manto visus laukus un vecāku klases metodes.

  11. Viena objekta spējabūt radītam no cita objekta, uzņemot visas viņa īpašības un uzvedību, dēvējas ar pārmantojamību.

  12. Pārmantojamība pakļaujas dažiem likumiem un ir savējā terminoloģija: • objekts, no kura ir radāms cits objekts, dēvējas ar bāzisku klasi, vecāku klasi vai senci; • radītais objekts dēvējas ar klasi-mantotājs, atvasinātu klasi vai pēcnācēju; • pēcnācējs var tikai pielikt savējā izsludināšanā kaut kas pie tā, ko viņš mantoja no bāziskas klases, bet nevar nekā aizvākt. Tādējādi, pēcnācējs vienmēr nes aiz sevis visas bāziska objekta pazīmes un īpašības;

  13. pie atvasinātas klases var būt tikai viena bāziska klase. Tas dēvējas ar vienkārtēju pārmantojamību un rada objektu hierarhiju, kurā pie visām klasēm bez izņēmuma ir vienmēr esams kaut vai viens kopīgs sencis (Delphi vidē tā ir Tobject klase).

  14. Iekapsulēšana Zem iekapsulēšanas domājas klases (objekta) spēja slēpt no ārpasaules nevajadzīgas realizācijas detaļas, un tieši – lauki un metodes, kuras ir vajadzīgas tikai iekšējam klases darbam un nevar būt derīgi programmētājiem, kas rada šīs klases objektus vai izmantojoši šo klasi kā bāzisks.

  15. Tādējādi, labi iekapsulētā klasē no ārpuses ir redzami tikai tie lauki un metodes, kuras būs derīgas, un labi ir apslēpti lauki un metodes, kuras ir nepieciešamas tikai iekšējam klases darbam. Bez slēpšanas nevajadzīgu lauku un metožu iekapsulēšanasdomā uzticamu objekta neatkarību. Tas nozīmē, ka viss nepieciešams klases darbam vajag būt realizētam iekšpus objekta, bet visi resursi, kurus objekts sagrābj savējā darba laikā, viņam pašam ir korekti jāatbrīvo (piemēram, taisīt ciet pēc sev failus un atbrīvot sagrābto atmiņu).

  16. Polimorfisms Programmēšanā efekts, kad viena un tā pati komanda, kas ir pievērsta pie dažādiem objektiem, tiek izpildīta ar tiem pie katra pa savu, dēvējas ar polimorfismu. Polimorfisms ļauj programmētājam nevis rūpēties par uzrunu pie katra objekta atsevišķā, bet gan ir vienkārši norādīt objektu grupai izpildīt vienu un to pašu komandu.

  17. Objektu klases Katrs objekts vienmēr pieder dažai objektu klasei. Objektu klase - tas ir viena tipa objektu lielas kopas apkopotais (abstrakts) apraksts. Objekti ir savējās klases konkrētie pārstāvji, tos pieņemts saukt par klases eksemplāriem. Piemēram, Suns klase ir jēdziens abstrakts, bet šīs klases eksemplārs Manējais Suns BOBIK ir jēdziens konkrēts.

  18. Klases OOP atbalstam Delphi valodā ir ievesti objektu datu tipi, ar kuru palīdzību vienlaikus aprakstītās dati un operācijas pār tiem. Objektu datu tipi sauc par klasēm, bet to eksemplāri - ar objektiem.

  19. Objektu klases tiek noteiktas globāla bloka typesekcijā. Klases apraksts iesākas no atslēgu vārda classun noslēdzas ar atslēgu vārdu end. Pa formu izsludināšanas klases ir līdzīgas parastiem ierakstiem, bet bez datu laukiem var saturēt lietotāja procedūru un funkciju izsludināšanas. Tādas procedūras un funkcijas apkopoti sauc par metodēm, tie ir paredzēti dažādu operāciju izpildei ar objektiem.

  20. Piemērs 1. Minēsim klases izsludināšanas piemēru, kura ir paredzēta tekstu faila lasīšanai "delimitedtext” formātā (fails tādā formātā pārstāv rindu secīgumu; katra rinda sastāv no nozīmēm, kuras nodalīja viens no otra simbols-atdalītājs):

  21. type TDelimitedReader = class // Lauki FileVar: TextFile; Items: array of string; Delimiter: Char; // Metodes procedure PutItem(Index: Integer; const Item: string); procedure SetActive(const AActive: Boolean); function ParseLine(const Line: string): Integer; function NextLine: Boolean; function GetEndOfFile: Boolean; end;

  22. Klase satur laukus (Filevar, Items, Delimiter) un metodes (PutItem, SetActive, ParseLine, NextLine, GetEndOffile). Metožu virsraksti vienmēr ir nākami aiz lauku saraksta. Programmisks metožu kods ir uzrakstāms atsevišķi no klases definēšanu un tiks atvests vēlāk.

  23. Klase parasti apraksta būtību, kas ir modelējama programmā. Piemēram, Tdelimitedreader klasi pārstāv tekstu faila "lasītājs" ar salasījumu rindu izjaukšanu uz elementiem (apakšrindām), kurus nodalīja viens no otra dažs simbols, saucamais atdalītājs.

  24. Klase satur daži lauku: • Filevar ir failu mainīgais, kas ir nepieciešams piekļūšanai pie faila; • Delimiter- simbols, kurš kalpo par elementu atdalītāju; • Items- elementu masīvs, ko saņēma pēdējās salasīdamas rindas izjaukšana;

  25. Klase tāpat satur metožu rindu (procedūru un funkciju): • PutItem - novieto elementu Items masīvā pa Index indeksu; ja indekss pārsniedz augšēju masīva robežu, tad masīva izmērs automātiski palielinās; • SetActive - ver vaļā vai taisa ciet failu, no kura ir ražojama rindu lasīšana; • ParseLine - īsteno rindas izjaukšanu: iedala elementus no rindas un novieto tos Items masīvā; atdod izcelto elementu daudzumu;

  26. NextLine– nolasa kārtējo rindu no faila un ar ParseLine metodes palīdzību īsteno tās izjaukšanu; kārtējās rindas sekmīgās lasīšanas gadījumā funkcija atdod nozīmi True, bet citādi - nozīme False (ir sasniegtas faila beigas); • GetEndOffile- atdod būla vērtību, kas rāda, vai ir sasniegtas faila beigas.

  27. Pievērsīsiet uzmanību, ka apraksts, kurš ir atvests augstāk, ir nekas cits, kā interfeisa deklarācija darbam ar Tdelimitedreader klases objektiem. PutItem , SetActive, ParseLine, NextLine un GetEndOffile metožu realizācijas uz šo brīdi nav, tomēr radīšanai un klases eksemplāru izmantošanai viņa pagaidām un nevajadzīga.

  28. Objekti Lai no klases apraksta pārietu pie objekta, vajag izpildīt atbilstošo izsludināšanu varsekcijā: var Reader: Tdelimitedreader; Šīs izsludināšanas darbā ar parastiem datu tipiem būtu pietiek tipa eksemplāra saņemšanai. Tomēr objekti Delphi vidē ir dinamiski dati, t.i. izkārtojas dinamiskā atmiņā.

  29. Tādēļ mainīgais Reader- tas ir vienkāršs atsauce uz eksemplāru (objekts ir atmiņā), kurš fiziski vēl neeksistē. Lai konstruētu Tdelimitedreader klases objektu (izcelt atmiņu eksemplāram) un sasaistītu ar viņu mainīgu Reader, vajag programmas tekstā novietot sekojošo operatoru: Reader := Tdelimitedreader.Create;

  30. Create- tas ir tā saucamais objekta konstruktors; viņš vienmēr ir klāt klasē un kalpo eksemplāra radīšanai un inicializēšanai. Radot objektu atmiņā izceļas vieta tikai viņa laukiem. Metodes, tāpat kā parastas procedūras un funkcijas, novietojas programmas koda apgabalā; tie māk strādāt ar savējās klases jebkuriem eksemplāriem un nedublējas atmiņā.

  31. Pēc radīšanas objektu var izmantot programmā: saņemt un uzstādīt viņa lauku vērtības, izsaukt viņa metodes. Piekļūšana pie laukiem un objekta metodēm notiek ar precizēto vārdu palīdzību, piemēram: Reader.NextLine; Bez tam, tāpat kā darbā ar ierakstiem, pieļaujams withoperatora izmantošana, piemēram: withReaderdoNextline;

  32. Ja objekts top nevajadzīgs, viņš ir jāattālina ar speciālas Destroy metodes izsaukumu, piemēram: Reader.Destroy; // atmiņas atbrīvošana, ko aizņem objekts Destroy- tā ir tā saucamais objekta destruktors; viņš ir klāt klasē līdzās konstruktoram un kalpo objekta noraidīšanai no dinamiskas atmiņas.

  33. Pēc destruktora izsaukuma mainīgais Reader top nesaistīts un nav jāizmanto piekļūšanai pie laukiem un metodēm jau neesošā objekta. Lai atšķirtu programmā saistītus objekta mainīgus no nesaistītiem, pēdēji vajag inicializēt ar nilvērtību. Piemēram, sekojošajā fragmentā uzruna pie Destroy destruktoram tiek izpildīta tikai tajā gadījumā, ja objekts reāli eksistē: Reader := nil; ... if Reader <> nil then Reader.Destroy;

  34. Destruktora izsaukums neesošajiem objektiem nepieņemsim un izpildot programmu atvedīs pie kļūdas. Lai atpestītu programmētājus no liekām kļūdām, objektos ieveda iepriekš noteiktu Freemetodi, kuru vajag izsaukt destruktora vietā. Free metode pats izsauc Destroy destruktoru, bet tikai tajā gadījumā, ja objekta mainīga vērtība nav vienāda nil. Tādēļ pēdējo rindiņu piemērā, kurš ir minēts augstāk, var pārrakstīt sekojoši. Reader.Free;

  35. Piemērs 2. Iekapsulēšana un īpašības Par iekapsulēšanu tiek saprasta objekta lauku slēpšana ar piekļūšanas nodrošinājuma mērķi pie tiem tikai ar klases metožu palīdzību. Delphi valodā piekļūšanas ierobežojums pie objekta laukiem realizēsies ar objekta īpašību palīdzību. Objekta īpašība ir raksturojama ar lauku, kas saglabā īpašības vērtību, un divām metodēm (write un read), kas nodrošina piekļūšanu pie īpašības lauka.

  36. Klases aprakstā pirms īpašības vārda ieraksta property vārdu (īpašība). Pēc īpašības vārda ir norādāms viņa tips, pēc tam - metožu vārdi, kas nodrošina piekļūšanu pie īpašības nozīmes. Pēc read vārda ir norādāms metodes vārds, kas nodrošina īpašības lasīšanu, pēc write vārda - metodes vārds, kas atbild par īpašības ierakstu. Zemāk ir minēts Tperson klases apraksta piemērs, kas satur divas īpašības: Name Un Address.

  37. typeTName = string[15]; TAddress = string[35];TPerson = class // klase privateFName: TName; // Name īpašības vērtībaFAddress: TAddress; // Address īpašības vērtība Constructor Create(Name:Tname); Procedure Show; Function GetName: TName; Function GetAddress: TAddress; Procedure SetAddress(NewAddress:TAddress);

  38. publicProperty Name: Tname // īpašībaNameread GetName; // tikai lasīšana Property Address: TAddress // īpašībaAddressread GetAddress // lasīšāna write SetAddress; // un ierakstīšana end;

  39. Programmā īpašības vērtības uzstādīšanai nevis vajag ierakstīt īpašības vērtības uzstādīšanas metodes pielietojuma pie objekta instrukciju, bet gan ir jāieraksta vērtības īpašībai piesavināšanās parastu instrukciju. Piemēram, lai piesavinātos vērtību student objekta Address īpašībai, pietiek ierakstīt student.Address := ‘Daugavpils, Smilšu ielā 21,dz.3'; Kompilators pārtranslē vērtības īpašībai piesavināšanās atvesto instrukciju metodes izsaukuma instrukcijā student.SetAddress(‘Daugavpils, Smilšu ielā 21,dz.3 ');

  40. Uzstādīt īpašības vērtību, kas ir aizsargāta no ieraksta, var objekta inicializēšanas laikā. Zemāk ir atvestas Tperson klases metodes, kas nodrošina objekta Tperson klases radīšanu un piekļūšana pie viņa īpašībām. // Tperson objekta konstruktors Constructor TPerson.Create(Name:TName); beginFName:=Name; end; // īpašības Name vērtības saņemšanas metodeFunction TPerson.GetName;beginResult:=FName; end;

  41. // īpašības Address vērtības saņemšanas metode function TPerson.GetAddress;beginResult:=FAddress; end; // īpašības Address vērtības izmaiņas metode Procedure TPerson.SetAddress(NewAddress:TAddress); beginif FAddress = ‘’ then FAddress := NewAddress; end;

  42. Tperson objekta konstruktors rada objektu un uzstāda Fname lauka vērtību, kas noteic Name īpašības vērtību. Instrukcijas programmas, kas nodrošina Tperson klases objekta radīšanu un viņa īpašības uzstādīšanu, var būt, piemēram, tādi: student := Tperson.Create('Ivanovs'); student.Address := ‘Smilšu ielā, m.3, dz.25';

  43. Pārmantojamība Objektorientētas programmēšanas koncepcija paredz iespēju noteikt jaunas klases ar lauku, īpašību un metožu piemetinājuma palīdzību pie jau eksistējošajām klasēm. Jaunu klašu saņemšanas tāds mehānisms dēvējas ar radīšanu. Pie tam jauna, radītā klase (pēcnācējs) manto savējās bāziskās, vecāku klases īpašības un metodes.

  44. Klases-pēcnācēja izsludināšanā ir norādāma vecāku klase. Piemēram, Temployee (līdzstrādnieks) klase var būt radīts no Tperson klases, kura ir aplūkota augstāk, ar Fdepartment (nodaļa) lauka pielikšanu. Templioyee klases izsludināšana šajā gadījumā var izskatīties tā: Temployee = class(Tperson) Fdepartment: string; // nodaļas nosaukums constructorCreate(Name:tname;Dep:integer); end; Tperson klases vārds, kurš ir noslēgts iekavas, rāda, ka Temployee klase tiek atvasināta no Tperson klases. Savukārt, Tperson klase ir bāzisks Temployee klasei.

  45. Temployee klasei jābūt savējo personīgo konstruktoru, kas nodrošina klases-vecāku un savējo lauku inicializēšanu. Lūk Temployee klases konstruktora realizācijas piemērs: constructor Temployee.Create(Name:tname;Dep:integer); begin inheritedCreate(Name); Fdepartment:=dep; end; Minētajā piemērā ar inherited direktīvu izsaucas vecāku klases konstruktors. Pēc tā piesavinās vērtība klases-pēcnācēja laukam.

  46. Pēc atvasinātas klases objekta radīšanas programmā var izmantot laukus un vecāku klases metodes. Zemāk ir atvests programmas fragments, kas demonstrē šo iespēju. engineer := Temployee.Create('Sidorov',’RTU DF’); engineer.address := ‘Jātnieku ielā m.8, dz.10'; Pirmā instrukcija rada tipa Temployee objektu, otrā - uzstāda īpašības vērtību, kura attiecas pret vecāku klasi.

  47. Redzamības līmeņi Klases atribūtiem iespējami četri aizsardzības līmeņi: Private (privātie) - pieejami tikai šīs klases metodēm, klases apakšklasē nav pieejami. Protected (aizsargātie) - pieejami šīs klases apakšklasēm, kuras tos var atstāt aizsargātus vai padarīt publiskus.Public (publiskie) - pieejami no ārpuses, paliek publiski arī apakšklasē. Published (publicētie) – pēc aizsardzības pakāpeslīdzīgi publiskajiem.

  48. Protected unprivatedirektīvas Bez klases (lauku, metožu, īpašību) elementu izsludināšanai klases apraksts, kā likums, satur protected (aizsargāts) un private (aizvērts) direktīvas, kuri uzstāda klases elementu redzamības pakāpi programmā.

  49. Klases elementi, kas ir izziņoti protected sekcijā, ir pieejami tikai klasēs, kuras ir radītas no viņa. Šīs sekcijas klases elementu redzamības apgabals neaprobežojas ar moduli, kurā atrodas klases apraksts. Parasti protected sekcijā novieto klases metožu aprakstu.

  50. Klases elementi, kas ir izziņoti private sekcijā, redzami tikai iekšpus moduļa. Šie elementi nav pieejami aiz robežām moduļa, pat atvasinātās klasēs. Parasti private sekcijā novieto klases lauku aprakstu, bet metodes, kas nodrošina piekļūšanu pie šiem laukiem, novieto protected sekcijā.

More Related