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
Rad 11: Rad 11:
 
<br>
 
<br>
  
= <b><span style="color:#931136">2.1 &nbsp; Modellering med UML</span></b> =
+
 
 +
= <b><span style="color:#931136">Inkapslingens konsekvenser</span></b> =
 
<div class="ovnE">
 
<div class="ovnE">
=== <b><span style="color:#931136">Projekt Lönespecifikation</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 att ha <b><span style="color:red">privata datamedlemmar</span></b>.
  
<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">Lösningen</span></b> är publika <b><span style="color:red">accessmetoder</span></b>. Det finns tre sorters accessmetoder:
  
<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!
+
# Get-metoder
 
+
# Set-metoder
<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?
+
# Strängrepresentationsmetoder
 
+
::&nbsp;&nbsp;Vilka operationer är relevanta, karakteristiska eller typiska för den?
+
 
+
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>
 
</big>
 
</div>
 
</div>
  
  
= <b><span style="color:#931136">Klassdiagram</span></b> =
+
= <b><span style="color:#931136">Klassen Empl</span></b> =
<div class="ovnA">
+
<div class="ovnC">
=== <b><span style="color:#931136">Resultat av modellering av projektet Lönespecifikation:</span></b> ===
+
[[Image: Empl.jpg]]
 +
</div>
  
<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> =
 +
<div class="ovnC">
 +
[[Image: GetSet.jpg]]
 +
</div>
  
<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 class="ovnC">
Minustecknen står framför <b>datamedlemmarna</b> och plustecknen står framför <b>metoderna</b>.
+
<div style="border:1px solid black;display:inline-table;margin-left: 0px;"> [[Image: GetSetKorex.jpg]]</div>
 
+
I de högra kolumnerna står datamedlemmarnas <b>datatyper</b> resp. metodernas <b>returtyper</b>.
+
</big>
+
 
</div>
 
</div>
  
  
 +
= <b><span style="color:#931136">Vad är 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.
+
 
+
* &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.
+
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.
 
</big>
 
</big>
 
</div>
 
</div>
  
  
= <b><span style="color:#931136">Array av referenser</span></b> =
+
= <b><span style="color:#931136">Klassen EmplP</span></b> =
<div class="ovnE">
+
<div class="ovnA">
[[Image: Array_av_Referens.jpg]]
+
[[Image: EmplP.jpg]]
 
</div>
 
</div>
  
  
= <b><span style="color:#931136">Huvudprogrammet EmploTest</span></b> =
+
= <b><span style="color:#931136">Programmet Property</span></b> =
<div class="ovnE">
+
<div class="ovnA">
[[Image: EmploTest.jpg]]
+
[[Image: Property.jpg]]
 
</div>
 
</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>
+
 
+
 
+
= <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>
+
 
+
  
  

Versionen från 27 november 2022 kl. 09.49

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



Inkapslingens konsekvenser

Inkapsling innebär att ha privata datamedlemmar.

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


Klassen Empl

Empl.jpg


Programmet GetSet

GetSet.jpg


Ett körexempel

GetSetKorex.jpg


Vad är 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.