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

Från Mathonline
Hoppa till: navigering, sök
m
m
 
(48 mellanliggande versioner av samma användare visas inte)
Rad 1: Rad 1:
 
__NOTOC__
 
__NOTOC__
<big>Ons 25 okt, kl 9-12</big>
+
<!-- <big>Ons 25 okt, kl 9-12</big> -->
  
  
Rad 15: Rad 15:
 
<br>
 
<br>
  
= <b><span style="color:#931136">8.3 &nbsp; Inkapsling</span></b> =
+
= <b><span style="color:#931136">Kap 9 Klasser (forts.)</span></b> =
 +
 
 +
= <b><span style="color:#931136">9.3 &nbsp; Inkapsling</span></b> =
 
<div class="ovnE">
 
<div class="ovnE">
<div style="border:1px solid black;display:inline-table;margin-left: 0px;"> [[Image: Inkapsling.jpg]]</div>
+
<div style="border:1px solid black;display:inline-table;margin-left: 0px;"> [[Image: Inkapslingb.jpg]]</div>
 
</div>
 
</div>
  
  
 
= <b><span style="color:#931136">Åtkomstmodifieraen private</span></b> =
 
= <b><span style="color:#931136">Åtkomstmodifieraen private</span></b> =
 +
<div class="ovnA">
 +
<div style="border:1px solid black;display:inline-table;margin-left: 0px;"> [[Image: Private.jpg]]</div>
 +
</div>
 +
 +
 +
= <b><span style="color:#931136">Inkapsling och dess problematik</span></b> =
 
<div class="ovnC">
 
<div class="ovnC">
+++
+
<div style="border:1px solid black;display:inline-table;margin-left: 0px;"> [[Image: Inkapslinga.jpg]]</div>
=== <b><span style="color:#931136">Programmet All_in_main() utan modularisering</span></b> ===
+
<div style="border:1px solid black;display:inline-table;margin-left: 0px;"> [[Image: All_in_main.jpg]]</div>
+
  
  
<big><big>
+
<big><big><b><span style="color:red">Problem:</span></b>
Programmet är varken proceduralt eller objektorienterat.
+
  
Vi ska modularisera programmet på olika nivåer. Det gör i två steg:
+
Hur ska privata datamedlemmar <b><span style="color:red">initieras</span></b> när de är oåtkomliga?
</big></big>
+
</div>
+
  
 +
<b><span style="color:red">Lösningen:</span></b>
  
= <b><span style="color:#931136">Steg 1: modularisering på funktionsnivå (procedural)</span></b> =
+
Man använder publika metoder för att via dem komma åt klassens privata datamedlemmar.
<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:
+
En av dessa metoder är <b>klassens konstruktor</b>.
 +
 
</big></big>
 
</big></big>
 +
</div>
  
<div style="border:1px solid black;display:inline-table;margin-left: 0px;"> [[Image: Procedure.jpg]]</div>
 
  
 +
= <b><span style="color:#931136">9.4 &nbsp; Konstruktor</span></b> =
 +
<div class="border-divblue">
 +
<big>
 +
<b>Klassens konstruktor</b> är en publik metod vars uppgift är att initiera klassens privata datamedlemmar.
  
== <b><span style="color:#931136">Parametrisering</span></b> ==
+
Konstruktorn är en speciell [[Kap_8_Klasser_(22)#Konstruktorns_tre_egenskaper|<b><span style="color:blue">metod med tre egenskaper</span></b>]].
<div style="border:1px solid black;display:inline-table;margin-left: 0px;"> [[Image: Parametrisering.jpg]]</div>
+
  
 +
Konstruktorn finns by default i alla klasser, men man kan även definiera den själv i klassen.
  
== <b><span style="color:#931136">Programmet Procedure</span></b> ==
+
Se exemplet nedan:
<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">Exempel: Klassen Circle med konstruktor</span></b> =
 +
<div class="ovnE">
 +
[[Image: CircleConstr.jpg]]
  
på hur man strukturerar koden.
 
  
En nackdel av programmet Procedure ur modelleringssynpunkt är att main():s
+
== <b><span style="color:#931136">Programmet Encapsulation</span></b> ==
 +
[[Image: Encapsulation_cpp.jpg]]
  
lokala variabel radie är separerad från funktionerna area() och omkrets().
 
  
Nackdel, därför att radie är ”ur modelleringssynpunkt” en del av cirkeln.
+
<big>Klassen Circle:s datamedlem <b><span style="color:red">radie</span></b> är oåtkomlig här p.g.a. åtkomstmodifieraren <b><span style="color:red">private</span></b>.  
  
I den objektorienterade programmeringen är <b>modellering av vekligheten</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>
  
den styrande synen på hur man strukturerar koden.
+
=== <b><span style="color:#931136">Körexempel</span></b> ===
</big></big>
+
<div style="border:1px solid black;display:inline-table;margin-left: 0px;"> [[Image: EncapsKorex.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="ovnC">
== <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="ovnA">
 
<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>.
 +
 
 +
Default konstruktorn sätts ur funktion endast om man definierar en egen konstruktor.
 
</big></big>
 
</big></big>
  
== <b><span style="color:#931136">Programmet CircleTest</span></b> ==
 
<div style="border:1px solid black;display:inline-table;margin-left: 0px;"> [[Image: CircleTest.jpg]]</div>
 
  
 +
<div style="border:1px solid black;display:inline-table;margin-left: 0px;"> [[Image: Default_konstr.jpg]]</div>
  
=== <b><span style="color:#931136">Körexempel</span></b> ===
+
 
<div style="border:1px solid black;display:inline-table;margin-left: 0px;"> [[Image: Obj_oriented_Korex.jpg]]</div>
+
<div style="border:1px solid black;display:inline-table;margin-left: 0px;"> [[Image: Default_konstr_2.jpg]]</div>
 
</div>
 
</div>
  
 +
<br><br>
  
= <b><span style="color:#931136">Klassbegreppet</span></b> =
+
<div class="border-divblue">
<div class="ovnC">
+
=== <b><span style="color:#931136">Gå vidare till: &nbsp;&nbsp;<div class="smallBox">[[Övningar 22 (C/Cpp 23)|<span style="color:blue">Övningar 22</span>]]</div> &nbsp;&nbsp;&nbsp; när du är klar med denna genomgång.</span></b> ===
<div style="border:1px solid black;display:inline-table;margin-left: 0px;"> [[Image: Klassbegreppet.jpg]]</div>
+
 
</div>
 
</div>
 +
 +
  
  

Nuvarande version från 1 mars 2025 kl. 18.44


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


Kap 9 Klasser (forts.)

9.3   Inkapsling

Inkapslingb.jpg


Åtkomstmodifieraen private

Private.jpg


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.


9.4   Konstruktor

Klassens konstruktor är en publik metod vars uppgift är att initiera klassens privata datamedlemmar.

Konstruktorn är en speciell metod med tre egenskaper.

Konstruktorn finns by default i alla klasser, men man kan även definiera den själv i klassen.

Se exemplet nedan:


Exempel: Klassen Circle med konstruktor

CircleConstr.jpg


Programmet Encapsulation

Encapsulation cpp.jpg


Klassen Circle:s datamedlem radie är oåtkomlig här p.g.a. åtkomstmodifieraren private.

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

Körexempel

EncapsKorex.jpg


Konstruktorns tre egenskaper

KonstrEgenskapera.jpg


Default konstruktorn

Alla klasser i C++ har automatiskt en default konstruktor.

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


Default konstr.jpg


Default konstr 2.jpg



Gå vidare till:        när du är klar med denna genomgång.











Copyright © 2023. All Rights Reserved.