Skillnad mellan versioner av "Kap 1 Objektorienterad programmering (forts. 2)"

Från Mathonline
Hoppa till: navigering, sök
m
m
 
(16 mellanliggande versioner av samma användare visas inte)
Rad 1: Rad 1:
__TOC__
+
__NOTOC__
 
{| border="0" cellspacing="0" cellpadding="0" height="30" width="100%"
 
{| border="0" cellspacing="0" cellpadding="0" height="30" width="100%"
 
| style="border-bottom:1px solid #797979" width="5px" |  
 
| style="border-bottom:1px solid #797979" width="5px" |  
Rad 13: Rad 13:
  
 
= <b><span style="color:#931136">1.6 &nbsp; Referensvariabler</span></b> =
 
= <b><span style="color:#931136">1.6 &nbsp; Referensvariabler</span></b> =
<div class="ovnE">
+
<div class="ovnA">
 
<big><big>
 
<big><big>
 
:Gå igenom texten (PDF 4 sidor)<span>:</span>
 
:Gå igenom texten (PDF 4 sidor)<span>:</span>
Rad 21: Rad 21:
  
  
= <b><span style="color:#931136">1.2 &nbsp; Klassbegreppet</span></b> =
+
= <b><span style="color:#931136">1.7 &nbsp; Komposition</span></b> =
<div class="ovnC">
+
<div class="ovnE">
=== <b><span style="color:#931136">En klass som ett C# program</span></b> ===
+
<big>
<div style="border:1px solid black;display:inline-table;margin-left: 0px;"> [[Image: Firsta.jpg]]</div>
+
En <b><span style="color:red">bil</span></b> har en <b><span style="color:red">motor</span></b>. Båda är tekniskt komplexa objekt, byggda av experter.
  
 +
Man sätter ihop bilen som ett objekt av <b><span style="color:red">klassen Bil</span></b> genom att bygga in i den
  
<big><big>Varför står metoden <b><span style="color:red">Main()</span></b> i en <b><span style="color:red">klass</span></b>, nämligen <b><span style="color:blue">class First</span></b> &nbsp;?
+
en motor som i sin tur är ett objekt av en annan klass, <b><span style="color:red">klassen Motor</span></b>.
 +
----
 +
<b><span style="color:red">Komposition</span></b> är sammansättning av ett objekt med ett annat objekt (komponent).
  
Eftersom koden ska vara ett <b><span style="color:red">C# program</span></b>, nämligen:
+
För att kunna sammansätta objekt måste man först sammansätta <b><span style="color:red">klasser</span></b>.
  
<div style="border:1px solid black;display:inline-table;margin-left: 0px;"> [[Image: CsPrograma.jpg]]</div>
+
Komposition betyder sammansättning och är relaterad till <b><span style="color:red">modularisering</span></b>.
 +
----
 +
Med hjälp av Lego-principen bygger man program med hjälp av redan skrivna
  
Koden ovan (<b><span style="color:blue">class First</span></b>) är det det enklast tänkbara <b><span style="color:red">C# programmet</span></b>.
+
klasser som kan ingå som komponenter i andra klasser. Vi har:
  
Metoden <b><span style="color:red">Main()</span></b> kan inte skrivas utanför klassen.
+
# <b><span style="color:red">Komposition av klasser</span></b>
</big></big>
+
# <b><span style="color:red">Komposition av objekt</span></b>
 +
</big>
 
</div>
 
</div>
  
  
= <b><span style="color:#931136">Definition 1 av klass</span></b> =
+
= <b><span style="color:#931136">Klassen Date</span></b> =
<div class="ovnE">
+
<div class="ovnC">
 +
[[Image: Date.jpg]]
 +
</div>
  
<div style="border:1px solid black;display:inline-table;margin-left: 0px;"> [[Image: VadKlass.jpg]]</div>
 
  
 +
= <b><span style="color:#931136">Komposition av klasser</span></b> =
 +
<div class="ovnC">
 +
=== <b><span style="color:#931136">Klassen Employ</span></b> ===
 +
[[Image: Employ.jpg]]
 +
</div>
  
<big><big><b><span style="color:red">Generell</span></b> är en klass därför att den beskriver en <b>kategori</b> av saker och ting:
 
  
* &nbsp; &nbsp; ett <b>begrepp</b>
+
= <b><span style="color:#931136">Komposition av objekt</span></b> =
 +
<div class="ovnC">
 +
=== <b><span style="color:#931136">Programmet Composition</span></b> ===
 +
[[Image: Composition.jpg]]
 +
</div>
  
* &nbsp; &nbsp; en <b>idé</b>
 
  
* &nbsp; &nbsp; en <b>mall</b>.  
+
= <b><span style="color:#931136">1.8 &nbsp; Arv</span></b> =
 +
<div class="ovnE">
 +
=== <b><span style="color:#931136">Arvrelationens modell</span></b> ===
 +
<div style="border:1px solid black;display:inline-table;margin-left: 0px;"> [[Image: Arv.jpg]]</div>
  
Enligt klassens mall kan sedan <b>objekt</b> av denna klass skapas. Medan klassen
 
  
är abstrakt, är objekten verkliga eller virtuella saker och ting i den reala världen.
+
<big>
 +
Superklassen kallas även för <b><span style="color:red">basklassen</span></b>. &nbsp; T.ex. kallas basklassens konstruktor för <b><span style="color:red">base()</span></b>.
  
<b><span style="color:red">Modulär</span></b> är en klass därför att den kodas som en separat och namngiven modul
+
<b><span style="color:red">Problem:</span></b>
  
så att den kan användas av vilka andra program som helst. Liksom en Legobit
+
Subklassen ärver basklassens datamedlemmar och metoder. Men hur ska konstruktorn ärvas?
  
för att kunna konstruera andra program. Principen heter <b>modularisering</b>.
+
<b><span style="color:red">Lösningen:</span></b> &nbsp; Se konstruktorns kod i klassen Employee.
 
+
<b><span style="color:red">Klass och objekt är två olika begrepp.</span></b>
+
</big>
 
+
<b>Exempel:</b>
+
 
+
Pepparkakor är <b><span style="color:red">objekt.</span></b>
+
 
+
Pepparkaksformen är <b><span style="color:red">klassen.</span></b>
+
</big></big>
+
 
</div>
 
</div>
  
  
= <b><span style="color:#931136">Definition 2 av klass</span></b> =
+
= <b><span style="color:#931136">Arvrelationens implementering</span></b> =
 
<div class="ovnA">
 
<div class="ovnA">
<div style="border:1px solid black;display:inline-table;margin-left: 0px;"> [[Image: Def_2_klass.jpg]]</div>
+
=== <b><span style="color:#931136">Klassen Date</span></b> ===
 +
<big>
 +
Både superklassen <b>Person</b> och subklassen <b>Employee</b> (nedan) behöver [[Kap_1_Objektorienterad_programmering_(forts._2)#Klassen_Date|<b><span style="color:#931136">klassen Date</span></b>]], för att
  
 +
deklarera datamedlemmar av typ <b>Date</b>. Det är samma klass som användes vid komposition.
  
<big><big>Ett begrepp kan ha olika definitioner om de inte motsäger varandra och belyser olika
+
Därför måste klassen <b>Date</b> inkluderas i detta projekt.
  
aspekter av begreppet. Sammanhanget i vilket begreppet används avgör betydelsen.</big></big>
+
På så sätt är projektet ett exempel på både komposition och arv.  
</div>
+
</big>
  
  
= <b><span style="color:#931136">1.3 &nbsp; Modulariseringsprocessen</span></b> =
+
=== <b><span style="color:#931136">Super- eller basklassen Person</span></b> ===
<div class="ovnE">
+
[[Image: Personc.jpg]]
=== <b><span style="color:#931136">Utan modularisering: all kod i Main()</span></b> ===
+
<div style="border:1px solid black;display:inline-table;margin-left: 0px;"> [[Image: All_in_Main.jpg]]</div>
+
</div>
+
  
  
= <b><span style="color:#931136">Modularisering på metodnivå</span></b> =
+
=== <b><span style="color:#931136">Subklassen Employee</span></b> ===
<div class="ovnC">
+
[[Image: Employeea.jpg]]
<big><big>
+
Modulariseringens <b>1:a steg: <span style="color:red">Logiken</span></b> flyttas till en <b><span style="color:red">ny metod Ok()</span></b> utanför Main().
+
</big></big>
+
  
<div style="border:1px solid black;display:inline-table;margin-left: 0px;"> [[Image: Method_Module.jpg]]</div>
 
  
 +
=== <b><span style="color:#931136">Programmet Inheritance</span></b> ===
 +
[[Image: Inheritancea.jpg]]
  
<big><big>Klassen <b>Method</b> har två metoder: <b>Main()</b> och <b>Ok()</b>: Main() anropar Ok(). Vid anrop:
 
  
skickas den aktuella parametern input till den formella parametern passwd och retur-
+
=== <b><span style="color:#931136">Körexempel</span></b> ===
 
+
<div style="border:1px solid black;display:inline-table;margin-left: 0px;"> [[Image: InheritanceKorexa.jpg]]</div>
värdet av typ <b>bool</b> returneras via Ok() till Main() och används i if-satsens samt loopens villkor.
+
</big></big>
+
 
</div>
 
</div>
  
  
= <b><span style="color:#931136">Modularisering på klassnivå</span></b> =
+
= <b><span style="color:#931136">1.9 &nbsp; Polymorfism</span></b> =
<div class="ovnA">
+
<div class="ovnE">
<big><big>
+
==== <b><span style="color:#931136">Ex.: &nbsp;&nbsp;Två olika typer av konto i en bank:</span></b> ====
Modulariseringens <b>2:a steg:</b> Metoden Ok() flyttas till en annan klass = <b>ny datatyp</b>.
+
  
I Main() skapas ett <b><span style="color:red">objekt</span></b> av den nya datatypen Password och
+
<div style="border:1px solid black;display:inline-table;margin-left: 0px;"> [[Image: Polymorfism.jpg]]</div>
 +
</div>
  
<b><span style="color:red">objektets metod</span></b> Ok() anropas i Main().
 
</big></big>
 
  
=== <b><span style="color:#931136">Klassen Password</span></b> ===
+
= <b><span style="color:#931136">Super- eller basklassen Account</span></b> =
<div style="border:1px solid black;display:inline-table;margin-left: 0px;"> [[Image: Password.jpg]]</div>
+
<div class="ovnC">
 +
[[Image: AccountPolym.jpg]]
 +
</div>
  
  
<big><big>
+
= <b><span style="color:#931136">Subklassen MinimalAccount</span></b> =
Klasserna <b><span style="color:#931136">Password</span></b> och <b><span style="color:#931136">PasswordUse</span></b> utgör ETT <b><span style="color:red">objektorienterat</span></b> program.
+
<div class="ovnC">
</big></big>
+
[[Image: MinimalAccount.jpg]]
 +
</div>
  
=== <b><span style="color:#931136">Klassen PasswordUse</span></b> ===
 
<div style="border:1px solid black;display:inline-table;margin-left: 0px;"> [[Image: PasswordUse.jpg]]</div>
 
  
 
+
= <b><span style="color:#931136">Programmet PolymorphTest</span></b> =
=== <b><span style="color:#931136">Ett körexempel</span></b> ===
+
<div class="ovnA">
<div style="border:1px solid black;display:inline-table;margin-left: 0px;"> [[Image: PasswordUseKorexa.jpg]]</div>
+
[[Image: PolymorphTest.jpg]]
 
</div>
 
</div>
  
 +
 +
= <b><span style="color:#931136">Körexempel</span></b> =
 +
<div class="ovnA">
 +
[[Image: PolymorphKorex.jpg]]
 +
</div>
  
  

Nuvarande version från 24 november 2022 kl. 23.48

        <<  Agenda          Innehåll & struktur          Genomgång          Dagens övningar          Nästa lektion  >>      


1.6   Referensvariabler

Gå igenom texten (PDF 4 sidor):
\( \qquad\;\;\, \)\( \qquad\;\;\, \)


1.7   Komposition

En bil har en motor. Båda är tekniskt komplexa objekt, byggda av experter.

Man sätter ihop bilen som ett objekt av klassen Bil genom att bygga in i den

en motor som i sin tur är ett objekt av en annan klass, klassen Motor.


Komposition är sammansättning av ett objekt med ett annat objekt (komponent).

För att kunna sammansätta objekt måste man först sammansätta klasser.

Komposition betyder sammansättning och är relaterad till modularisering.


Med hjälp av Lego-principen bygger man program med hjälp av redan skrivna

klasser som kan ingå som komponenter i andra klasser. Vi har:

  1. Komposition av klasser
  2. Komposition av objekt


Klassen Date

Date.jpg


Komposition av klasser

Klassen Employ

Employ.jpg


Komposition av objekt

Programmet Composition

Composition.jpg


1.8   Arv

Arvrelationens modell

Arv.jpg


Superklassen kallas även för basklassen.   T.ex. kallas basklassens konstruktor för base().

Problem:

Subklassen ärver basklassens datamedlemmar och metoder. Men hur ska konstruktorn ärvas?

Lösningen:   Se konstruktorns kod i klassen Employee.


Arvrelationens implementering

Klassen Date

Både superklassen Person och subklassen Employee (nedan) behöver klassen Date, för att

deklarera datamedlemmar av typ Date. Det är samma klass som användes vid komposition.

Därför måste klassen Date inkluderas i detta projekt.

På så sätt är projektet ett exempel på både komposition och arv.


Super- eller basklassen Person

Personc.jpg


Subklassen Employee

Employeea.jpg


Programmet Inheritance

Inheritancea.jpg


Körexempel

InheritanceKorexa.jpg


1.9   Polymorfism

Ex.:   Två olika typer av konto i en bank:

Polymorfism.jpg


Super- eller basklassen Account

AccountPolym.jpg


Subklassen MinimalAccount

MinimalAccount.jpg


Programmet PolymorphTest

PolymorphTest.jpg


Körexempel

PolymorphKorex.jpg










Copyright © 2022 TechPages AB. All Rights Reserved.