Objektorienteret programmering – begrebsmodellering
Introducerende objektorienteret programmering Begrebsapparat til OO Objektorienteret programmering et program betragtes som en fysisk model der simulerer opførslen af en imaginær eller reel del af verden. Fysisk modellering er baseret på en opfattelse af virkeligheden i termer af fænomener og begreber. En fysisk model konstrueres ved at modellere fænomener som objekter og begreber som klassser af objekter. Jens Bennedsen, 2003 Introducerende objektorienteret programmering
Begrebsmodellering Referencesystem Modelsystem Problemspecifikke begreber modellering Realiserede begreber abstraktion abstraktion Problem/vision vedrørende fænomener Objekter Referencesystem Modelsystem Jens Bennedsen, 2003 Introducerende objektorienteret programmering
Introducerende objektorienteret programmering Fænomener og begreber Et fænomen er en ting der har en bestemt, individuel eksistens (fysisk eller imaginær) Et begreb er en generaliseret ide af en samling af fænomener baseret på viden om fælles egenskaber ved fænomenerne i samlingen Jens Bennedsen, 2003 Introducerende objektorienteret programmering
Introducerende objektorienteret programmering Om begreber Designation (benævnelse) Den samling af navne under hvilke begrebet er kendt Ekstension Den samling fænomener som begrebet dækker Intension En samling egenskaber som karakteriserer fænomenerne i begrebets ekstension Jens Bennedsen, 2003 Introducerende objektorienteret programmering
Introducerende objektorienteret programmering Eksempler på begreber Designation Ekstension Intension Agurk Transportmiddel Cirkel Smukt design Jens Bennedsen, 2003 Introducerende objektorienteret programmering
Aristotelisk begrebsopfattelse Karakteristik (intension :-) Intensionen omfatter definerende egenskaber som alle fænomener i ekstensionen skal have og karakteristiske egenskaber som fænomener i ekstensionen kan have Veldefinerede begreber med skarpe grænser Relativt homogene fænomener Ekstensionen er entydigt fastlagt ved intensionen Eksempler (ekstension :-) Findes inden for veletablerede fagområder som matematik, fysik, zoologi, botanik Jens Bennedsen, 2003 Introducerende objektorienteret programmering
Prototypisk begrebsopfattelse Karakteristik (intension :-) Intensionen omfatter eksempler på egenskaber som fænomener i ekstensionen kan have samt en udvalgt samling af typiske fænomener: prototyper “Uldne” begreber med uskarpe grænser Stor variation mellem fænomener Ekstensionen er ikke entydigt fastlagt ved intensionen Eksempler (ekstension :-) Overalt! Jens Bennedsen, 2003 Introducerende objektorienteret programmering
Begrebsmodellering, igen Referencesystem Modelsystem RB PSB Problemspecifikke begreber (PSB) er prototypiske Realiserede begreber (RB) er Aristoteliske Udfordring i modellering at give aristoteliansk definition til prototypiske begreber Jens Bennedsen, 2003 Introducerende objektorienteret programmering
Introducerende objektorienteret programmering Dannelse af begreber Identifikation af objekter Klassifikation gruppering Generalisering/specialisering is-a Aggregering has-a Associering X-a Organisering af viden... Jens Bennedsen, 2003 Introducerende objektorienteret programmering
Identifikation af objekter Sokrates Miss Daimi Hannibals march over alperne Peter Bastian Sirius 2000 Herbie Ritt Bjerregaard Jens Bennedsen, 2003 Introducerende objektorienteret programmering
Klassifikation (abstraktion) Uden abstraktion ville alt være _ _ _ ??? Klassifikation er et middel til at danne og skelne mellem forskellige klasser af fænomener og begreber. To former for klassifikation Gruppering Generalisering/specialisering Jens Bennedsen, 2003 Introducerende objektorienteret programmering
Introducerende objektorienteret programmering Gruppering Samling af ens fænomener til begreber. Person Sokrates Peter Ritt Bil Miss Daimi Herbie Rejse Sirius 2000 Hannibals march over Alperne Jens Bennedsen, 2003 Introducerende objektorienteret programmering
Generalisering/specialisering (is-a) Samling af begreber til overbegreber (generaliserede begreber). Køretøj Truck Bil Bus Taxa Personbil Ambulance Stationcar Sedan Jens Bennedsen, 2003 Introducerende objektorienteret programmering
Hvad gør et begreb specielt? Transportmiddel Fly Passagerfly Rutefly 4-personers fly Militærfly Skib Køretøj Bil Bus Lastbil Varevogn Pick-up Truck Personbil Privatbil Taxa Cykel Figur Ellipse Cirkel Trekant Ligebenet Ligesidet Retvinklet Firkant Trapez Parallellogram Rektangel Kvadrat Drage Tilføjelse af egenskaber! Jens Bennedsen, 2003 Introducerende objektorienteret programmering
Specialisering: ekstra egenskaber B is-a A Intension(B) Intension(A) A B Ekstension(B) Ekstension(A) Jens Bennedsen, 2003 Introducerende objektorienteret programmering
Introducerende objektorienteret programmering Super- og sub begreber Udlånsemne Generelt begreb Specielle begreber udlån(l: låner) indlån() erHjemme() Bog Video forfatter() forlag() ISBN() producer() format() spilletid() Jens Bennedsen, 2003 Introducerende objektorienteret programmering
Super- og sub begreber i Java public class Video extends Udlånsemne { /** Hvem har produceret denne video?*/ public String producer(); /** Hvilket format har denne video */ public String format(); /** Hvor lang tid varer denne video */ public Time spilletid(); } public class Udlånsemne { /** * Dette emne udlånes til l. * Emnet skal være hjemme */ public void udlån(Låner l); * Emnet returneres public void indlån(); * Er emnet hjemme public boolean erHjemme(); } public class Bog extends Udlånsemne { /** Hvad er forlaget */ public String forlag(); /** Hvad er titlen */ public String titel(); /** Hvad er ISBN nummeret */ public String ISBN(); } Jens Bennedsen, 2003 Introducerende objektorienteret programmering
Introducerende objektorienteret programmering Hvad kan jeg gøre? Udlånsemne u = new Udlånsemne(…); Bog b = new Bog (…); Video v = new Video (…); Låner l = new Låner (…); u.udlån(l);? u.erHjemme()? u.forfatter()? u.spilletid()? u.ISBN()? v.spilletid()? v.udlån(l);? v.erHjemme()? v.indlån()? b.ISBN()? v.ISBN()? Hvilke egenskaber har Udlånsemne? Bog? Video? Jens Bennedsen, 2003 Introducerende objektorienteret programmering
Introducerende objektorienteret programmering Hierarkier En subklasse er en specialisering af superklassen Subklassen arver superklassens egenskaber Subklassen er mere specialiseret end superklassen Forekomster: superklassen subklassen Jens Bennedsen, 2003 Introducerende objektorienteret programmering
Introducerende objektorienteret programmering Hierarkier - 2 Mængden af forekomster i subklassen er indeholdt i mængden af forekomster af superklassen I.e. hvis det er en subklasseforekomst er det også en superklasseforekomst. I subklassen tilføjes egenskaber Jens Bennedsen, 2003 Introducerende objektorienteret programmering
Substitutionsprincippet Substitutionsprincippet: En subklasse skal kunne erstatte (substituere) sin superklasse Bruges til at sikre et “velformet” hierarki Bruges til at checke et eksisterende hierarki. Jens Bennedsen, 2003 Introducerende objektorienteret programmering
Introducerende objektorienteret programmering Eksempel Beholder Værtshusgæst drik( ) gladAften( ) class Værtshusgæst { … public void gladAften() { //pre: penge på lommen //post: alkohol i blodet while (<stående>) do b.drik() } private Beholder b; end Værtshusgæst Krus Glas Damesko drik( ) drik( ) drik( ) Jens Bennedsen, 2003 Introducerende objektorienteret programmering
Introducerende objektorienteret programmering Anvendelse Et system til en bank der blandt andet kan beregne renter: Konto System rente( ) * tilskrivRente( ) class System { … public void tilskrivRente() { //pre: - //post: Alle konti har fået til- skrevet renter Iterator i = konti.iterator(); while (i.hasNext()) { Konto k = (Konto)i.next(); k.rente(); } private ArrayList konti: Checkkonto Aktionærkonto Kassekredit rente( ) rente( ) rente( ) Jens Bennedsen, 2003 Introducerende objektorienteret programmering
Introducerende objektorienteret programmering Anvendelse 2 Differentieret moms på varer: Vare Moms returner p+25% moms( ):int moms (p:int) : int returner varensmoms.moms(pris) Food Luksusvare moms (p:int) : int moms (p:int) : int returner p+5% returner p+25% + 50 Jens Bennedsen, 2003 Introducerende objektorienteret programmering
Introducerende objektorienteret programmering Vare class Vare { public Vare(Moms mo, int pr) {m=mo; p=pr;} public int moms() {return m.moms(p);} public void updateMoms(Moms nyM) {m=nyM;} private Moms m; private int p; } class Moms { public int moms(int b) {return (int)(b*0.25);} } class FoodMoms extends Moms { public int moms(int b) {return (int)(b*0.05);} } Jens Bennedsen, 2003 Introducerende objektorienteret programmering
Introducerende objektorienteret programmering Anvendelse class Test { public void main (){ Moms am = new Moms(); FoodMoms fm = new FoodMoms(); Vare agurk = new Vare(fm, 5); System.out.println(agurk.moms()); agurk.updateMoms(am); } Jens Bennedsen, 2003 Introducerende objektorienteret programmering
Introducerende objektorienteret programmering Aggregering (has-a) Struktur mellem begreber der beskriver et hele og (nogle af) de dele som helet består af. Bil Motor Hjul Karosseri Sæde Dør Tag Skærm Rejse Afrejsested Destination Varighed Transportmiddel Jens Bennedsen, 2003 Introducerende objektorienteret programmering
Introducerende objektorienteret programmering Aggregering i Java class Rejse { … private Time varighed; private String afrejsested; private Transport transportmiddel; private String destination; } Time Rejse Jens Bennedsen, 2003 Introducerende objektorienteret programmering
Introducerende objektorienteret programmering Associering (X-a) X = låner / erUdlåntAf Emne Person 0..* 0..1 udlån(l: låner) indlån() erHjemme() registrer(e: emne) afRegistrer(e: emne) Jens Bennedsen, 2003 Introducerende objektorienteret programmering
Introducerende objektorienteret programmering Associering i Java (1) class Udlånsemne { public Item() { låner = null; } public boolean inLibrary() { return borrower == null; } public void udlån(Låner l) { låner = l; l.register(this); public void hjemlån() { låner.afRegister(this); låner = null; private Låner låner; Jens Bennedsen, 2003 Introducerende objektorienteret programmering
Introducerende objektorienteret programmering Associering i Java (2) class Låner { public Låner() { emner = new HashSet(); } public void register(Emne t) { emner.add(t); public void afRegister(Emne t) { emner.remove(t); private Set emner; Jens Bennedsen, 2003 Introducerende objektorienteret programmering
Begrebsdannelse og Java Klassifikation gruppering Specialisering is-a Aggregering has-a Associering X-a interface/class extends attribut reference Jens Bennedsen, 2003 Introducerende objektorienteret programmering