Skillnad mellan versioner av "Kap 8 Klasser (22)"

Från Mathonline
Hoppa till: navigering, sök
m
m
Rad 36: Rad 36:
  
  
= <b><span style="color:#931136">Steg 1: modularisering på funktionsnivå (procedural)</span></b> =
 
<div class="ovnA">
 
<big><big>
 
Beräkningarna flyttas från <b><span style="color:red">main()</span></b> till separata moduler <b><span style="color:red">area()</span></b> och <b><span style="color:red">omkrets()</span></b> och
 
  
lagras externt i en headerfil:
+
= <b><span style="color:#931136">1.5 &nbsp; Klassens konstruktor</span></b> =
</big></big>
+
<div class="ovnC">
 +
=== <b><span style="color:#931136">Inkapsling och dess problematik</span></b> ===
 +
<div style="border:1px solid black;display:inline-table;margin-left: 0px;"> [[Image: Inkapslinga.jpg]]</div>
  
<div style="border:1px solid black;display:inline-table;margin-left: 0px;"> [[Image: Procedure.jpg]]</div>
+
<big><b><span style="color:red">Problem:</span></b>
  
 +
Hur ska privata datamedlemmar <b><span style="color:red">initieras</span></b> när de är oåtkomliga?
  
== <b><span style="color:#931136">Parametrisering</span></b> ==
+
<b><span style="color:red">Lösningen:</span></b>
<div style="border:1px solid black;display:inline-table;margin-left: 0px;"> [[Image: Parametrisering.jpg]]</div>
+
  
 +
Man använder publika metoder för att via dem komma åt klassens privata datamedlemmar.
  
== <b><span style="color:#931136">Programmet Procedure</span></b> ==
+
En av dessa metoder är <b>klassens konstruktor</b>.
<div style="border:1px solid black;display:inline-table;margin-left: 0px;"> [[Image: Procedure_cpp.jpg]]</div>
+
<big><big>
+
</big>
 +
</div>
  
  
I den procedurala programmeringen är <b>problemlösning</b> den styrande synen
+
= <b><span style="color:#931136">Vad är konstruktorn?</span></b> =
 +
<div class="border-divblue">
 +
<big>
 +
<b>Konstruktorn</b> är en speciell [[Kap_1_Objektorienterad_programmering_(forts.)#Konstruktorns_tre_egenskaper|<b><span style="color:#931136">metod med tre egenskaper</span></b>]] vars uppgift är att initiera klassens privata datamedlemmar.
  
på hur man strukturerar koden.
+
Konstruktorn finns by default i alla klasser, men kan även skrivas i klassen. Se exemplet nedan.
 +
</big>
 +
</div>
  
En nackdel av programmet Procedure ur modelleringssynpunkt är att main():s
 
  
lokala variabel radie är separerad från funktionerna area() och omkrets().
+
= <b><span style="color:#931136">Exempel: Klassen Circle</span></b> =
 +
<div class="ovnE">
 +
[[Image: CircleKonstr.jpg]]
 +
</div>
  
Nackdel, därför att radie är ”ur modelleringssynpunkt” en del av cirkeln.
 
  
I den objektorienterade programmeringen är <b>modellering av vekligheten</b>  
+
= <b><span style="color:#931136">Åtkomstmodifieraren private</span></b> =
 +
<div class="ovnC">
 +
=== <b><span style="color:#931136">Programmet Encapsulation</span></b> ===
 +
[[Image: Encapsulation.jpg]]
  
den styrande synen på hur man strukturerar koden.
+
 
</big></big>
+
<big>Klassen Circle:s datamedlem <b><span style="color:red">radius</span></b> är oåtkomlig här pga åtkomstmodifieraren <b><span style="color:red">private</span></b>.
 +
 
 +
Men vi kan initiera den med <b><span style="color:red">input</span></b> via den publika metoden <b><span style="color:red">Circle()</span></b> dvs klassens konstruktor.
 +
</big>
 +
=== <b><span style="color:#931136">Ett körexempel</span></b> ===
 +
<div style="border:1px solid black;display:inline-table;margin-left: 0px;"> [[Image: CircleKorexa.jpg]]</div>
 
</div>
 
</div>
  
  
= <b><span style="color:#931136">Steg 2: modularisering på klassnivå (objektorienterad)</span></b> =
+
= <b><span style="color:#931136">Konstruktorns tre egenskaper</span></b> =
<div class="ovnE">
+
<div class="border-divblue">
== <b><span style="color:#931136">Vår första klass: klassen Circle</span></b> ==
+
<div style="border:1px solid black;display:inline-table;margin-left: 0px;"> [[Image: KonstrEgenskapera.jpg]]</div>
<div style="border:1px solid black;display:inline-table;margin-left: 0px;"> [[Image: Circle_cpp.jpg]]</div>
+
</div>
  
  
 +
= <b><span style="color:#931136">Default konstruktorn</span></b> =
 +
<div class="border-divblue">
 
<big><big>
 
<big><big>
Klassen <b><span style="color:#931136">Circle</span></b> och programmet <b><span style="color:#931136">CircleTest</span></b> utgör ETT objektorienterat program.
+
Alla klasser i C# har automatiskt en <b>default konstruktor</b> som
</big></big>
+
  
== <b><span style="color:#931136">Programmet CircleTest</span></b> ==
+
initierar klassens datamedlemmar till <b>default värden</b>.
<div style="border:1px solid black;display:inline-table;margin-left: 0px;"> [[Image: CircleTest.jpg]]</div>
+
  
 
+
Default konstruktorn sätts ur funktion endast om man definierar en egen konstruktor.
=== <b><span style="color:#931136">Körexempel</span></b> ===
+
</big></big>
<div style="border:1px solid black;display:inline-table;margin-left: 0px;"> [[Image: Obj_oriented_Korex.jpg]]</div>
+
 
</div>
 
</div>
  
  
= <b><span style="color:#931136">Klassbegreppet</span></b> =
 
<div class="ovnC">
 
<div style="border:1px solid black;display:inline-table;margin-left: 0px;"> [[Image: Klassbegreppet.jpg]]</div>
 
</div>
 
  
  

Versionen från 23 oktober 2023 kl. 09.38

Ons 25 okt, kl 9-12


        <<  Agenda          Genomgång 22          Övningar 22          Planering          Nästa lektion  >>      


8.3   Inkapsling


Åtkomstmodifieraen private

+++

Programmet All_in_main() utan modularisering

All in main.jpg


Programmet är varken proceduralt eller objektorienterat.

Vi ska modularisera programmet på olika nivåer. Det gör i två steg:


1.5   Klassens konstruktor

Inkapsling och dess problematik

Inkapslinga.jpg

Problem:

Hur ska privata datamedlemmar initieras när de är oåtkomliga?

Lösningen:

Man använder publika metoder för att via dem komma åt klassens privata datamedlemmar.

En av dessa metoder är klassens konstruktor.


Vad är konstruktorn?

Konstruktorn är en speciell metod med tre egenskaper vars uppgift är att initiera klassens privata datamedlemmar.

Konstruktorn finns by default i alla klasser, men kan även skrivas i klassen. Se exemplet nedan.


Exempel: Klassen Circle


Åtkomstmodifieraren private

Programmet Encapsulation

Encapsulation.jpg


Klassen Circle:s datamedlem radius är oåtkomlig här pga åtkomstmodifieraren private.

Men vi kan initiera den med input via den publika metoden Circle() dvs klassens konstruktor.

Ett körexempel

CircleKorexa.jpg


Konstruktorns tre egenskaper

KonstrEgenskapera.jpg


Default konstruktorn

Alla klasser i C# har automatiskt en default konstruktor som

initierar klassens datamedlemmar till default värden.

Default konstruktorn sätts ur funktion endast om man definierar en egen konstruktor.











Copyright © 2023. All Rights Reserved.