Skillnad mellan versioner av "Kap 3 Metoder i OOP"

Från Mathonline
Hoppa till: navigering, sök
(Skapade sidan med '__NOTOC__ {| border="0" cellspacing="0" cellpadding="0" height="30" width="100%" | style="border-bottom:1px solid #797979" width="5px" |   {{Not selected tab|Lektion 4...')
 
m
 
(10 mellanliggande versioner av samma användare visas inte)
Rad 11: Rad 11:
 
<br>
 
<br>
  
= <b><span style="color:#931136">2.1 &nbsp; Modellering med UML</span></b> =
+
= <b><span style="color:#931136">3.1 &nbsp; Accessmetoder</span></b> =
 
<div class="ovnE">
 
<div class="ovnE">
=== <b><span style="color:#931136">Projekt Lönespecifikation</span></b> ===
+
=== <b><span style="color:#931136">Inkapslingens konsekvenser</span></b> ===
==== <b><span style="color:#931136">Definition av program ur ett objektorienterat perspektiv:</span></b> ====
+
 
+
<div style="border:1px solid black;display:inline-table;margin-left: 0px;"> [[Image: Kravspecifikation.jpg]]</div>
+
</div>
+
 
+
 
+
= <b><span style="color:#931136">UML design och modellering i fyra steg</span></b> =
+
<div class="ovnC">
+
 
<big>
 
<big>
<b><span style="color:red">Steg 1</span></b> &nbsp; <b>Förstå problemet:</b> &nbsp; Läs kundens kravspecifikation (rutan ovan) om och om igen!
+
Inkapsling innebär inkluderingen av <b><span style="color:red">privata datamedlemmar</span></b> i sitt program.
  
<b><span style="color:red">Steg 2</span></b> &nbsp; <b>Identifiera problemets <span style="color:red">nyckelbegrepp:</span></b>
+
[[2.7_Klassens_konstruktor|<b><span style="color:blue">Konstruktorn</span></b>]] löser problemet med <b><span style="color:red">initieringen</span></b> av privata datamedlemmar. Men:
 +
----
 +
<b><span style="color:red">Problem</span></b> som kvarstår:
  
::&nbsp;&nbsp;<div class="smallBoxVariant">Saker som är relevanta för verksamheten, som man behöver lagra information om.</div>
+
Hur ska privata datamedlemmar <b><span style="color:red">ändras</span></b> efter initieringen när de är oåtkomliga?
  
::&nbsp;&nbsp;Vid implementeringen kommer nyckelbegrepp att bli programmets <b><span style="color:red">klasser.</span></b>  
+
Hur ska de <b><span style="color:red">läsas</span></b>, hur ska de <b><span style="color:red">skrivas</span></b> efter initieringen?
 
+
----
<b><span style="color:red">Steg 3</span></b> &nbsp; <b>Identifiera <span style="color:red">datamedlemmar</span> till varje klass:</b> &nbsp; Vad består den av? Testa "Har"-relationen!
+
<b><span style="color:red">Lösningen</span></b> är publika <b><span style="color:red">accessmetoder</span></b>. Det finns tre sorters accessmetoder:
 
+
<b>
<b><span style="color:red">Steg 4</span></b> &nbsp; <b>Identifiera <span style="color:red">metoder</span> till varje klass:</b> &nbsp; Vad gör den eller vad kan man göra med den?
+
# &nbsp; &nbsp; Get-metoder
 
+
# &nbsp; &nbsp; Set-metoder
::&nbsp;&nbsp;Vilka operationer är relevanta, karakteristiska eller typiska för den?
+
# &nbsp; &nbsp; Strängrepresentationsmetoder
 
+
</b></big>
Läs mer om UML design och modellering i fyra steg i [http://mathonline.se:1802/Boken%20Alg%20Datastr%20Design.pdf <b><span style="color:blue">kursboken</span></b>], sid 93-96.
+
</big>
+
 
</div>
 
</div>
  
  
= <b><span style="color:#931136">Klassdiagram</span></b> =
+
= <b><span style="color:#931136">Get- och Set-metoder</span></b> =
<div class="ovnA">
+
<div class="ovnC">
=== <b><span style="color:#931136">Resultat av modellering av projektet Lönespecifikation:</span></b> ===
+
=== <b><span style="color:#931136">Klassen Empl</span></b> ===
 +
[[Image: Empl.jpg]]
  
<div style="border:1px solid black;display:inline-table;margin-left: 0px;"> [[Image: Klassdiagrama.jpg]]</div>
 
  
 +
=== <b><span style="color:#931136">Programmet GetSet</span></b> ===
 +
[[Image: GetSet.jpg]]
  
<big>
 
Modellen ovan följer det objektorienterade modelleringsspråket <b>Unified Modeling Language (UML)</b>:
 
  
Varje <b>klass</b> modelleras i en ruta som innehåller klassens datamedlemmar och metoder.
+
=== <b><span style="color:#931136">Ett körexempel</span></b> ===
 
+
<div style="border:1px solid black;display:inline-table;margin-left: 0px;"> [[Image: GetSetKorex.jpg]]</div>
Minustecknen står framför <b>datamedlemmarna</b> och plustecknen står framför <b>metoderna</b>.
+
 
+
I de högra kolumnerna står datamedlemmarnas <b>datatyper</b> resp. metodernas <b>returtyper</b>.
+
</big>
+
 
</div>
 
</div>
  
  
 +
= <b><span style="color:#931136">3.2 &nbsp; Property</span></b> =
 
<div class="border-divblue">
 
<div class="border-divblue">
<big><big>
+
<big>
* &nbsp;&nbsp; Modellen är projektets <b><span style="color:red">arkitektur</span></b> och därför logiskt primär. Koden är sekundär.
+
<b>Property</b> är en hybrid mellan datamedlem och metod som alltid är publik.
  
* &nbsp;&nbsp; Modellen är <b><span style="color:red">oberoende</span></b> av programmeringsspråket.
+
Property automatiserar Get- och Set-metoder i klasser med privata datamedlemmar.
  
* &nbsp;&nbsp; Modellen måste vara objektorienterad för att programmet ska bli det.
+
Property är till för att utanför klassen kunna läsa värdet av och skriva ett nytt värde till en privat datamedlem.
 
+
* &nbsp;&nbsp; Modellen "planteras", koden växer ur modellen och följer den.
+
 
+
* &nbsp;&nbsp; Därför kallas omvandlingen av modell till kod <b><span style="color:red">implementation</span></b>.
+
</big></big>
+
</div>
+
 
+
 
+
= <b><span style="color:#931136">Implementation av modellen</span></b> =
+
<div class="ovnE">
+
=== <b><span style="color:#931136">Klassen Time</span></b> ===
+
[[Image: Time.jpg]]
+
 
+
=== <b><span style="color:#931136">Klassen Employee</span></b> ===
+
[[Image: EmployeeL.jpg]]
+
 
+
<big>
+
För enkelhetens skull deklareras klassernas datamedlemmar som public.
+
 
+
Därför definieras inte heller någon konstruktor. I en skarp version borde datamedlemmarna vara private.
+
 
</big>
 
</big>
 
</div>
 
</div>
  
  
= <b><span style="color:#931136">Array av referenser</span></b> =
+
<div class="ovnA">
<div class="ovnE">
+
=== <b><span style="color:#931136">Klassen EmplP</span></b> ===
[[Image: Array_av_Referens.jpg]]
+
[[Image: EmplP.jpg]]
</div>
+
  
  
= <b><span style="color:#931136">Huvudprogrammet EmploTest</span></b> =
+
=== <b><span style="color:#931136">Programmet Property</span></b> ===
<div class="ovnE">
+
[[Image: Property.jpg]]
[[Image: EmploTest.jpg]]
+
</div>
+
  
  
= <b><span style="color:#931136">Skrivning till fil</span></b> =
+
=== <b><span style="color:#931136">Körexempel: samma som ovan.</span></b> ===
<div class="ovnC">
+
=== <b><span style="color:#931136">Klassen WriteFile</span></b> ===
+
<div style="border:1px solid black;display:inline-table;margin-left: 0px;"> [[Image: WriteFilea.jpg]]</div>
+
 
</div>
 
</div>
 
 
= <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: EmploKorres.jpg]]</div>
 
</div>
 
 
 
  
  

Nuvarande version från 27 november 2022 kl. 17.50

        <<  Agenda          Genomgång          Dagens övningar          Nästa lektion  >>      


3.1   Accessmetoder

Inkapslingens konsekvenser

Inkapsling innebär inkluderingen av privata datamedlemmar i sitt program.

Konstruktorn löser problemet med initieringen av privata datamedlemmar. Men:


Problem som kvarstår:

Hur ska privata datamedlemmar ändras efter initieringen när de är oåtkomliga?

Hur ska de läsas, hur ska de skrivas efter initieringen?


Lösningen är publika accessmetoder. Det finns tre sorters accessmetoder:

  1.     Get-metoder
  2.     Set-metoder
  3.     Strängrepresentationsmetoder


Get- och Set-metoder

Klassen Empl

Empl.jpg


Programmet GetSet

GetSet.jpg


Ett körexempel

GetSetKorex.jpg


3.2   Property

Property är en hybrid mellan datamedlem och metod som alltid är publik.

Property automatiserar Get- och Set-metoder i klasser med privata datamedlemmar.

Property är till för att utanför klassen kunna läsa värdet av och skriva ett nytt värde till en privat datamedlem.


Klassen EmplP

EmplP.jpg


Programmet Property

Property.jpg


Körexempel: samma som ovan.









Copyright © 2022 TechPages AB. All Rights Reserved.