07 – Kort om OO Introduktion.

Slides:



Advertisements
Lignende præsentationer
Velkommen til Softwarekonstruktion
Advertisements

Programmeringsparadigmer.
T1 – OPGAVE 14.2 LINETT & SABRINA Klasse Varer namespace Opgave_14._2 { class Varer { private string vare; private string farve; private double.
1 Intro nedarvning (eng.: inheritance) Nedarvningshierarkier Intro polymorfisme (eng.: polymorphism) Abstract / virtual / override / sealed Intro interfaces.
KONCEPT Klasser og objekter En klasse beskriver et World ArrayList
Programmeringsteknologi: Lektion 1
Object-Orienteret Programmering og Design. 2 Nordjyllands Erhvervakademi – 2009 Indhold “Classes, objects and object-oriented programming (OOP) play a.
Selve objektet versus referencen til objektet Nedarvning
Objektorienteret programmering
08 – Mere OO Indkapsling Arv og polymorfi (OOP’s 3 hovedprincipper)
09 – Arv og polymorfi i java
Hvordan man skriver koden.
VOOP, 8 april Refleksion i objekt orienterede programmeringssprog Mandag 8/ Kasper Østerbye.
Arv Idéen i arv et at kunne genbruge gennem generalisering
13.1 Mathiassen, Munk-Madsen, Nielsen & Stage, 2000 © Funktionskomponent Oversigt, principper og teknikker Kapitel 13.
FEN NOEA/IT Programmeringsteknologi 1 Arv og polymorfi Substitutionsprincippet Abstrakte klasser Design Patterns (Composite)
17.1 Mathiassen, Munk-Madsen, Nielsen & Stage, 2000 © Implementering Principper, teknikker og vurdering Kapitel 17.
GP6, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 6 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder.
Lektion 7 Læsestof: Kopier fra Caranno
Fundamentale datastrukturer
Mønstre En lille introduktion. Singleton Tilgå et objekt igennem klassereference i stedet for objektreference.  Overflødiggør referencer til objektet.
Eksempel på realisering af domænemodel
GP 8, 24/ Grundlæggende programmering Efterår 2001 Forelæsning 8 onsdag 24/ kl. 9:15 – 12:00.
Objekter og klasser Rasmus D. Lehrmann DM
10. Datastrukturer. 2 Nordjyllands Erhvervakademi Collections library Datastrukturer i.NET kaldes normalt Collections Findes i namespace System.Collections.
GP 6, 13/ Grundlæggende programmering Forår 2002 Forelæsning 6 onsdag 13/ kl. 9:15 – 12:00.
1 Fundamentale datastrukturer. 2 Definitioner: abstrakt datatype, datastruktur Elementære datastrukturer og abstrakte datatyper : arrays, stakke, køer,
Repetition: Introduktion til OOP med C# og .NET
Comparable Students German Students Composite Pattern State Pattern Observer Pattern Collections Interfaces Abstrakte klasser Design Patterns.
GP7, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 7 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder.
8 RÅD VEDRØRENDE GOD PROGRAMMERING Effective (brown) Java.
FEN IntroJava AAU1 Klasser og objekter Grundbegreber Student-Course.
NOEA/IT FEN - Databaser/modellering 1 Datamodellering Den udvidede (enhanced) E/R-model (EE/R- modellen) Begreber Diagrammering Omformning til.
Forelæsning 2.2 Tilstand og opførsel (repetition)
KF04 GRAY Item 2, 12, 22, 32, 42, 52. Consider a builder when faced with many constructor parameters Item 2.
03 – Udtryk og metoder. 2 NOEA2009Java-kursus – Udtryk og metoder Udtryk i Java Java har standard udtrykene… Værditildeling Subrutiner og funktionskald.
9. Interfaces. 2 Nordjyllands Erhvervakademi Objectives “Good class design starts with good application design — how many classes, do they relate.
GP3, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 3 Vi begynder Slides ligger på hjemmesiden. Du er velkommen til.
FEN NOEA - Nordjyllands Erhvervsakademi1 Objektorienteret programmering Indkapsling Arv og polymorfi (OOP’s 3 hovedprincipper)
Effective Java Blå gruppe. Item 18: Interfaces frem for abstrakte klasser Kan implementeres i klasser der ikke nedarver Eksisterende klasser kan nemt.
Begreber og Redskaber 4. Plan for idag Om metoder, parametre, returværdier Et par ord om objekt-orientering Håndkøring af programmer.
Begreber og Redskaber 3. Plan for idag Om metoder, parametre, returværdier Overblik over klasser,objekter,nedarvning Et par ord om objekt-orientering.
 Jens Bennedsen 2002Objektorienteret systemudvikling Design klasse model ”Klassemodellen på vej til kode”
 Jens Bennedsen 2002Objektorienteret systemudvikling GRASP mønstre Basale ansvarsplaceringsregler.
Introduktion til programmering Repetition - ArrayList.
 Jens Bennedsen 2002Objektorienteret systemudvikling Persistens.
 Jens Bennedsen 2001Multimedie programmering10A.1 Polymorfi og nedarvning Motivation for arv og “mange former”
 Jens Bennedsen 2002Objektorienteret systemudvikling Design -> kode Mapning af et klassediagram til kode.
Klasser og objekter. dIntProg, E08Klasser og objekter.2 Grundbegreber Klasser og objekter –beskrivelse –oprettelse Attributter og metoder –tilstand –opførsel.
DAIMIIntroducerende objektorienteret programmering3B.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
 Jens Bennedsen, 2003Introducerende objektorienteret programmeringinterfaces.1 Interfaces En ren kontrakt.
DAIMIIntroducerende objektorienteret programmeringkd.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6A.1 Programmering med interfaces – en stak og en HP-regnemaskine push pop.
Klassehierarkier Specialisering vha. subklasser. dIntProg, E05Klassehierarkier.2 Oversigt Eksempler på specialisering –Aktør, Koreograf, Skuespiller,
Indledende Programmering Uge 6 - Efterår 2006
Interfaces Afkobling af programkomponenter (eksempel: Comparable)
Polymorfi Abstrakte klasser, substitutionsprincippet, statisk og dynamisk type.
Objektorienteret analyse og design Ó Bennedsen 2001 Design - part Programmering og systemudvikling Lektion 7 Design - part 2.
 Jens Bennedsen 2001Multimedie programmering13.1 Lingo Objectorienteret Lingo.
Kari Rye Schougaard, Ph.d.-stud. Værktøjer og Teknikker, 2006 A A R H U S U N I V E R S I T E T DATALOGISK INSTITUT Java på 20 minutter (eller lidt mere)
Programmering med interfaces Separering af specifikation, anvendelse og implementation.
Klasser og objekter – grundbegreber.  Michael E. Caspersen, 2001Introducerende objektorienteret programmeringKlasser og objekter.2 Klasser og objekter.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
 Jens Bennedsen 2001Multimedie programmering10B.1 Interfaces En ren kontrakt.
 Jens Bennedsen 2001Multimedie programmering4.1 Definition af begreber Interface, implements, klasse.
 Jens Bennedsen 2001Multimedie programmering3B.1 Specifikationer Betingelser, specifikationer og JavaDoc.
 Jens Bennedsen 2001Multimedie programmering3A.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
Klasser og objekter. dIntProg, F08Klasser og objekter.2 Grundbegreber Klasser og objekter –beskrivelse –oprettelse Attributter og metoder –tilstand –opførsel.
Objecter Introduktion Webintegrator HF1 PHP Object orienteret.
Klasser og objekter (Afsnit i manualen).
Præsentationens transcript:

07 – Kort om OO Introduktion

Kort om begreber i objekt orienteret programmering Klasser og objekter Arv og polymorfi

Et objekt har en tilstand og en adfærd: Objektets tilstand er de attributter der kendetegner objektet Adfærd bevirker at man kan ændre eller aflæse et objekts tilstand

Klasse Klassen er den fælles beskrivelse for objekterne. Objekterne er de konkrete forekomster af klassen Klasser eksisterer hele tiden - objekter kommer og går

Metodeoverloading Flere metoder med samme navn kan erklæres i samme scope, blot de har forskellige parameterlister. Fx: public Bankkonto(int kontonr){ kontonummer = kontonr; saldo = 0; } public Bankkonto(int kontonr; double saldo){ this.saldo = saldo;

Access Modifiers Public Private Protected Internal Protected internal Kan tilgås af alle metoder fra alle objekter Private Kan tilgås af den definerende klasses medlemmer og ikke andre Protected Kan tilgås af klassen selv og af arvinger – privat for alle andre Internal Kan tilgås af den definerende klasse og alle klasser i samme assembly Protected internal Kan tilgås af den definerende klasse, klasser i samme assembly og fra arvinger

Tilgå private attributter Vi ønsker at holde attributter private dels for at kunne skjule implementation (ikke fordi den hemmelig, men det giver frihed til at kunne ændre implementation) Men også for evt. at kunne styre hvordan de tilgås, således at objektet stadig har en vaild tilstand. Et banalt eksempel at saldo ikke bliver sat til et negativt tal, hvis der ikke må være overtræk på kontoen Tilgangen styres vha. get og set metoder. get-metoder kaldes også accesors, fordi de aflæser en værdi set-metoder kaldes mutators fordi de ændrer en værdi Aht. JavaBeans bør følgende konvention tilstræbes: public <datatype> getAttributNavn() //hvis read mulig public void setAttributNavn(<datatype> d) //hvis write mulig

Eksempel på realisering af domænemodel Del af design-klassediagram i et system til registrering af ansatte og projekter

Realisering af objektforbindelse Designovervejelser Hvilken vej skal objekterne kunne tilgås Forbindelse til 1 objekt Simpel objektreference Forbindelse til * objekter Reference til collection på 1-siden

OO = Programkvalitet Mål: modificérbarhed pålidelighed effektivitet Midler: indkapsling og dataabstraktion nedarvning og polymorfi CLR

OO-Principper -indkapsling Et objekt er (set udefra) en atomar enhed der tilbyder en række services (metoder/properties). Det at gøre detaljerne i objekters implementation utilgængelige kaldes information hiding. Det at gruppere data sammen med operationer på disse data under praktisering af information hiding kaldes indkapsling eller dataabstraktion. Indkapsling er et af hovedprincipperne i OOP

OO-Principper -nedarvning Nedarvning gør det muligt at udvide en eksisterende klasse. Nedarvning er typespecialisering, dvs. vi modellerer et ”er-en” forhold mellem den nedarvede klasse og den der arves fra - fx: en Checkkonto er-en Konto. Hvis vi står og mangler en klasse som er en specialisering af en klasse vi har, kan vi anvende nedarvning. Fx Konto -> CheckKonto

OO-Principper -nedarvning Nedarvning understøtter kodegenbrug Den der arves fra kaldes basisklasse/superklasse. Den der arver kaldes subklasse Husk at der gælder et er-en forhold mellem sub- og basisklassen En nedarvet klasse er typekompatibel med basisklassen: CheckKonto ck = new CheckKonto(); If (ck is Konto) returnerer true hvis CheckKonto arver fra Konto Er-en forholdet er transitivt.

Nedarvning - Constructors Hvis man ikke definerer en constructor, genereres en default. Ved nedarvning kalder denne implicit en default constructor (parameterløs) på basisklassen. Basisdelen af en nedarvet klasse initialiseres ved kald til base(param-liste). Kald til forfaders constructor er det første der sker i den nedarvede klasses constructor. :base(param-liste) placeres umiddelbart efter constructorens metodehoved

Nedarvning - attributter og constructors public class Chef : Ansat{ private ulong antalOptioner; public Chef(){} public Chef(string navn, float løn, ulong numbOfOpts) : base(navn, løn) { antalOptioner = numbOfOpts; } ……….. public class Ansat{ protected string navn; protected float løn; public Ansat(){} public Ansat(string navn, float løn){ this.navn = navn; this.løn = løn; } ……………

Nedarvning - redefinering En basisklasse-metode kan redefineres i den nedarvede klasse Fx Haev-metoden på en Konto/CheckKonto En basisklasse-metode der skal redefineres i den nedarvede klasse, skal erklæres virtual i basisklassen, og eksplicit overrides i den nedarvede klasse. Dette tilsidesætter basisklassens metode. Metoden i den nedarvede klasse skal have samme signatur og returtype som den virtuelle den redefinerer. En redefineret metode kan kalde den metode den redefinerer i superklassen vha base.metodenavn();

Nedarvning - redefinering public class Ansat{ …………….. public void GivBonus(float belob){ løn += belob; } ……………… public class Chef : Ansat{ ……………. public @Override void GivBonus(float belob){ base.GivBonus(belob); antalOptioner += 500; } ………………….

Arv - Vi vil udvide domænemodellen fra før

Polymorfi - redefinering af metoder Først implementerer vi metoden GivBonus(int belob) som virtual i klassen Ansat Herefter redefiner vi den i klasserne Chef og Saelger Endelig oprettes et array af Ansatte i main, hvor alle medarbejdere får 500,- i bonus

Vi gør nu Ansat-klassen abstrakt (GivBonus-metoden gøres abstrakt) Abstrakte klasser Lad os antage at man i sine designovervejelser har vedtaget at klassen Ansat er for generel. Man ønsker ikke at kunne oprette objekter af den, ligesom en generel GivBonus-metode ikke realiseres. Vi gør nu Ansat-klassen abstrakt (GivBonus-metoden gøres abstrakt)