F2: Krav på objektorienterat språk

Relevanta dokument
Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo

Objekt-orienterad programmering. Klassbegreppet och C++ UML. UMLs fördelar

Kursens mål. Objektorienterad programmering. Kursupplägg. Tillgodoräknande. Kursbok. Labsalar

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

Mer OOP. Variation i typ. Medlen repetition. Generiska klasser. Gränssnitt - Interface. Mer om klasser Några exempel UML

Imperativ programmering. Föreläsning 4

Programmering i C++ EDA623 Objektorienterad programutveckling. EDA623 (Föreläsning 5) HT / 33

Objektorienterad programmering

Dynamisk bindning och polymorfism

Objektorienterad programmering. Grundläggande begrepp

Föreläsning 15: Repetition DVGA02

Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder

Arv. Objektorienterad och komponentbaserad programmering

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Classes och Interfaces, Objects och References, Initialization

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Objektorienterad konstruktion

UML. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Objekt, klasser. Tillstånd Signatur Kommunikation Typ. Fält, parametrar och lokala variabler. Konstruktorer Metoder DAVA15

Lösningar till Fiktiv Tentamen på kursen. 2D4135 Objektorienterad programmering, design och analys med Java vt2004. Teoridel

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Innehåll. Pekaren this Självreferens. Klasser Resurshantering, representation. Överlagring av operatorer. Överlagring av operatorer

UML. Översikt UML. Relationer mellan klasser. A är ett aggregerat av B:n. Kontor aggregat av Enheter. 12 olika diagramtyper, bl.a.

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning

Outline. Objektorienterad Programmering (TDDC77) Att instansiera en klass. Objekt. Instansiering. Åtkomst. Abstrakt datatyp.

OOP Objekt-orienterad programmering

Objektorienterad Programmering (TDDC77)

Objektorienterad programmering, allmänt

Viktiga egenskaper hos ett program (Meyer): Objektorienterad programmering, allmänt. Vilka egenskaper vill vi att våra program ska ha?

Historik: OOP. Objektorientering. Historik: OOP (forts) En Dum Fråga

Objektorienterad Programmering (TDDC77)

Objektorientering Klasser

Målen med OOSU. Objektorienterad programmering. Objektorienterad programmering. Karlstads Universitet, Johan Öfverberg 1

KLASSER. Inkapsling Abstrakt datatyp Public och private. Klassmedlemmar Datamedlemmar Exempel Funktionsmedlemmar

Innehåll. 1 Kort om dynamisk polymorfism. 2 Arv i C++ 3 Multipelt arv. 4 Något om statisk polymorfism. class Container {

TDDE10 TDDE11, 725G90. Objektorienterad programmering i Java, Föreläsning 3 Erik Nilsson, Institutionen för Datavetenskap, LiU

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Outline. Objektorienterad Programmering (TDDC77) Signatur. Klassen calculator. Överlagring (overloading) Arv (inheritance) Ahmed Rezine

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

Outline. Objektorienterad Programmering (TDDC77) Laborationsserie del två. Vad händer under HT2. Introduktion HT2 UML.

Det objektorienterade synsättet. Objekt. Datorprogrammet kan uppfattas som en slags modell av den verklighet programmet skall samverka med.

Objektorienterad Programmering (TDDC77)

TDP005. Föreläsning 3 - UML. Filip Strömbäck

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Innehåll. Introduktion till objektorientering. OOP (objektorienterad programmering) Objekt, instanser, klasser

Objektorienterad programmering Föreläsning 5

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Objektorienterad Programmering (OOP) Murach s: kap 12-16

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

Introduktion till arv

Objektorienterad programmering Föreläsning 12. Copyright Mahmud Al Hakim

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 14

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

729G06 Föreläsning 1 Objektorienterad programmering

TDDC76 Programmering och datastrukturer

Syfte : Lära sig objektorienterad programmering Syfte : Lära sig programmering i ett OO-språk vilket?

Objektorienterad Programmering DAT043

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare

Föreläsning 8. Arv. Arv (forts) Arv och abstrakta klasser

Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

Inkapsling (encapsulation)

Konstruktion av klasser med klasser

EnKlass. Instans 3 av EnKlass. Instans 2 av EnKlass

TDDC76 - Programmering och Datastrukturer

UML 1(5) Introduktion till Unified Modeling Language. 1 Bakgrund och historik

1 Klasser och objektorientering Vad är objektorientering?

Föreläsning 13 Innehåll

TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare

TDA550 Objektorienterad programmering, fortsättningskurs. Föreläsning 1. Introduktion Variabler och typer

UML: Exempel. Ett modelleringsspråk. UML: Ansvar. UML: tre huvudanvändningar. Exempel: En klass position storlek. UML Unified Modelling Language

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Klasshierarkier - repetition

Programmering. Seminarier i datavetenskap, datorteknik och informationsteknik. Niklas Broberg

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Programmering i C++ EDA623 Arv. EDA623 (Föreläsning 6) HT / 42

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design Alex Gerdes, 2016

TDDC76 - Programmering och Datastrukturer

Outline. Objektorienterad Programmering (TDDC77) Åsidosättning. Signatur. Åsidosättning. Abstrakta klasser. Ahmed Rezine.

Static vs Dynamic binding Override vs Overload. Objekt-orienterad programmering och design Alex Gerdes och Sólrún Halla Einarsdóttir, 2018

1 Egna klasser. 1.1 En punkt-klass

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

F8: Typkonvertering i C++

Arv innebär att man skapar en ny klass (subklass) utifrån en redan existerande klass (superklass, basklass).

Objekt-orienterad utveckling. Objektorienterad analys och design. Objekt-orienterad programutveckling. Objekt-orienterad analys och design: Litteratur

Kapitel 3. Synlighet. Kapitel 3 - Klassanvändning, operatorer och pekare. Synlighet

Datastrukturer och algoritmer

Objektorienterad programmering

729G75: Programmering och algoritmiskt tänkande. Tema 3, föreläsning 2

Objekt-orienterad Programmering och Design. TDA551 Alex Gerdes, HT-2016

Objektorientering - Arv och polymorfi. Eric Elfving Institutionen för datavetenskap

Programvaruteknik. Programspråk. Skriptspråk. Inkapsling OOP. Abstraktion. Typsystem. Parallellism. Dynamisk typning. Concurrency

Programmering i C++ EDA623 Mer om klasser. EDA623 (Föreläsning 6) HT / 26

Generiska konstruktioner. Kursbokens kapitel 13

Det finns många flaggor till g++,

Transkript:

Institutionen för datavetenskap Umeå Universitet F2: Krav på objektorienterat språk Objektorienterad programmering för ingenjörer, VT-04

Innehåll Krav på objektorienterat språk Avvägningar vid design av objektorienterat språk Lite historik och exempel Programmeringsspråket C++ Bakgrund Designmål Egenskaper UML 04-05-25 2

Krav Fyra krav måste vara uppfyllda Abstrakt datatyp Inkapsling Arv Polymorfism och dynamisk bindning 04-05-25 3

Abstrakt datatyp Abstrakta datatypen kallas ofta klass Data kallas attribut Funktionalitet ges med metoder Att anropa en metod kallas att skicka ett meddelande till ett objekt 04-05-25 4

Inkapsling Kunna gömma information Väldefinerade gränsytor Ändring av objektets tillstånd sker genom metoderna Ändring av intern representation förändrar inte gränsytan set(sx, sy, ex, ey) { //... as before set(sx, sy, ex, ey) { startx = sx; starty = sy; endx = ex; endy = ey; } startx, starty, endx, endy } len = sqrt((ex sx)^2 + (ey sy)^2) startx, starty, endx, endy, len length() { return sqrt((endx startx)^2 + (endy starty)^2) } length() { return len; } 04-05-25 5

Arv Funktionalitet för återanvändning Inom systemet Generella bibliotek Tredje-parts komponenter Ändring i befintlig kod skall ej behövas Kräver generell design av utvecklare 04-05-25 6

Arv En subklass ärver från en superklass (basklass) Åtkomst av basklassens attribut måste kunna styras -> inkapslingskravet. Åtkomstnivåer Metoder skall kunna omdefineras -> ingen ändring i redan skriven kod. Två sorters metoder och två sorters attribut Instansmetoder och -attribut Klassmetoder och -attribut 04-05-25 7

Abstraktionsmodell Förenklat: Kan ses som en samling datorer/objekt som kommunicerar via meddelanden. Varje objekt är en abstraktion av en dator I den mening att den lagrar data och kan manipulera det. Identifiera objekt -> simulera processer och kommunikation Objektorienterad programmering är att lösa problem genom att identifiera objekten i problemet och sedan simulera dem, dess processer och den nödvändiga kommunikationen. 04-05-25 8

Avvägningar Vid design av ett objektorienterat språk måste man tänka på: Hur hanteras olika datatyper? Typkontroll? Statisk Dynamisk Minneshantering Explicit allokering Implicit allokering 04-05-25 9

Datatyper Primitiva datatyper Maskinnära typer, t.ex char, int, float, etc Sammansatta datatyper struct i C Abstrakta datatyper Attribut och metoder 04-05-25 10

Datatyper Tre sätt att angripa problemet med typsystemet: Den rena modellen, allt är objekt Utgå från ett imperativt språk och lägg till en objektmodell Objektmodell i botten men med imperativ stil för primitiva datatyper 04-05-25 11

Typkontroll Om språket skall vara starkt typat: Statisk typkontroll Restriktioner vid polymorfism Två sorters typkontroll vid metodanrop: Parametrarna måste stämma Returtypen likaså Alternativet är dynamisk typkontroll Vänta med kontrollen tills metoden anropas Kostsamt och försenar typkontrollen 04-05-25 12

Minneshantering Var allokera objekten? Tre sätt: Statiskt av kompilatorn Dynamiska objekt på stacken Eller på heapen Om heapen enda sättet Uniform metod Inga pekare som måste derefereras 04-05-25 13

Minneshantering Hur deallokeras objekten? Explicit Problem med dangling pointers Implicit Garbage Collection i någon form 04-05-25 14

Objektorienterade språk Historik Simula 67 Smalltalk 80 Procedurorienterad programmering Subprogram Programbibliotek Dataorienterad programmering Abstrakta datatyper Objektbaserade språk, föregångare till... 04-05-25 15

Programmeringsspråk Rena objektorienterade språk Smalltalk Eiffel Java C++ och Ada stöder objektorientering Det går att programmera objektorienterat i C eller assembler, men: Inkapsling på fil-nivå finns Betydligt mer overhead för arv, polymorfism, m.m. Exempel är GTK och GLib 04-05-25 16

Programmeringsspråk public class Konto { private float saldo; } public float uttag(float belopp) { //... } Java class Konto { public: float uttag(float belopp) { //... } private: float saldo; } C++ class Konto creation make feature make is do print ( Hello World!%N ) end end Eiffel 04-05-25 17

Smalltalk-exempel Objekt subclass: #SixSidedDie instancevariablenames: 'top sides' classvariablenames: '' category: 'Gaming' sides ^ sides top ^ top toss ^ top _ ((Random new next) * sides) asinteger + 1 sides: nsides sides _ nsides. self toss. SixSidedDie class instancevariablenames: '' new: nsides ^ self new sides: nsides. Smalltalk 04-05-25 18

Bakgrund C++ Skapades av Bjarne Stroustrup ca 1982 Snabbast växande i programhistorien Språket utvecklas fortfarande ISO/IEC 14882-1998 C++ Committee ANSI: J16 (förr X3J16) Bjarne Stroustrup http://www.research.att.com/~bs/homepage.html 04-05-25 19

Rolig fakta? Fejkad IEEE-intervju cirkulerar på nätet påstås erkänna att C++ ett hemskt språk för att skriva ohanterbar (unmaintainable) kod. Bjarne kallade språket först C with classes I folkmun kallades det new C Vilket ledde till att C började kallas plain C, straight C, old C Det senare lät förolämpande så Bjarne döpte om språket till C++ Och varför just C++? ++ är inkrement-operatorn i C Utökning av C Blev officiell standard 14 november 1997 kl. 10.30 04-05-25 20

Designmål C++ Kompatibelt med C Portabelt Bättre C Stöd för objektorientering Abstrakta datatyper Arv Polymorfism m.m. Effektiva program 04-05-25 21

Egenskaper C++ Hårdare typkontroll -> Säkrare program Referenstyp -> Blir mer lättläst Egendef typer, klasser -> Bygger ut språket Streams -> Säkrare I/O Arv -> Fundament i OO Dynamisk bindning -> Polymorfism Typparametrisering -> Generella mallar Undantagshantering -> Bra felhantering 04-05-25 22

Designval C++ Typsystem Utgått från imperativt språk och lagt till objektmodell Minneshantering Statisk allokering Dynamiska objekt på stacken Objekt allokerad på heapen Explicit allokering (new och delete) 04-05-25 23

Klasser och objekt, C++ Deklareras på liknande sätt som structs i C Två sätt att skapa objekt från en klass På heapen (med operatorn new) Som lokala (automatiska) variabler En klass två filer Header-fil (.h) och klassfil (.cc) Alt. kombinerat -> försvårar användning av klassen och minskar inkapsling Korsvis användning (mer om detta senare) 04-05-25 24

Hello World i C++ Mer under F4 04-05-25 25

UML Unified Modeling Language Three amigos Grady Booch James Rumbaug Ivar Jacobsen Gav upp sina egna metoder för att uppnå standardisering 04-05-25 26

Fördelar Används i väldigt stor utsträckning inom industrin Brett användningsområde Väletablerad, beprövad teknik Väldokumenterat Fritt (ej företagsägt) 04-05-25 27

Mål Modellera system (inte bara mjukvaran) Koppla ihop koncept Hantera skalning Skapa ett språk som både människor och datorer kan förstå 04-05-25 28

Översikt Vyer Diagram Modellelement Generella mekanismer för kommentarer etc 04-05-25 29

Användningsfall Use cases Systemets funktionalitet som den upplevs av en extern användare (actor) Öppna konto Kund Ta ut pengar Bankman 04-05-25 30

Klassdiagram 04-05-25 31

Klassdiagram Dependency: Association: Aggregation: Composition: Generalisation: Realisation: A A A A A A B B B B B B 04-05-25 32

Objektdiagram 04-05-25 33

Tillståndsdiagram 04-05-25 34

Sekvensdiagram 04-05-25 35