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

Från Mathonline
Hoppa till: navigering, sök
m
m
 
(5 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" |  
 
{{Not selected tab|[[Lektion 2 (OOP)| <<&nbsp;&nbsp;Agenda]]}}
 
{{Not selected tab|[[Lektion 2 (OOP)| <<&nbsp;&nbsp;Agenda]]}}
{{Not selected tab|[[Media: Innehall_OOP_design.pdf|Innehåll & struktur]]}}
+
{{Not selected tab|[[Innehåll och struktur av kursen OOP & design|Innehåll & struktur]]}}
 
{{Selected tab|[[Kap 1 Objektorienterad programmering (forts.)|Genomgång]]}}
 
{{Selected tab|[[Kap 1 Objektorienterad programmering (forts.)|Genomgång]]}}
 
{{Not selected tab|[[Övningar 2 (OOP)|Dagens övningar]]}}
 
{{Not selected tab|[[Övningar 2 (OOP)|Dagens övningar]]}}
Rad 60: Rad 60:
 
<div class="border-divblue">
 
<div class="border-divblue">
 
<big>
 
<big>
<b>Konstruktorn</b> är en speciell [[2.7_Klassens_konstruktor#Konstruktorns_egenskaper:|<b><span style="color:#931136">metod med tre egenskaper</span></b>]] vars uppgift är att initiera klassens privata datamedlemmar.
+
<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.
  
 
Konstruktorn finns by default i alla klasser, men kan även skrivas i klassen. Se exemplet nedan.
 
Konstruktorn finns by default i alla klasser, men kan även skrivas i klassen. Se exemplet nedan.
Rad 88: Rad 88:
  
  
= <b><span style="color:#931136">Konstruktorns tre egenskaper:</span></b> =
+
= <b><span style="color:#931136">Konstruktorns tre egenskaper</span></b> =
 
<div class="border-divblue">
 
<div class="border-divblue">
 
<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: KonstrEgenskapera.jpg]]</div>
 
</div>
 
</div>
  
 +
 +
= <b><span style="color:#931136">Default konstruktorn</span></b> =
 +
<div class="border-divblue">
 +
<big><big>
 +
Alla klasser i C# har automatiskt en <b>default konstruktor</b> som
 +
 +
initierar klassens datamedlemmar till <b>default värden</b>.
 +
 +
Default konstruktorn sätts ur funktion endast om man definierar en egen konstruktor.
 +
</big></big>
 +
</div>
 +
 +
 +
= <b><span style="color:#931136">Klassen CircleD med default konstruktor</span></b> =
 +
<div class="ovnE">
 +
[[Image: CircleD.jpg]]
 +
 +
 +
<big><b><span style="color:red">class</span></b> skapar automatiskt en <b><span style="color:red">default konstruktor</span></b> som inte har någon parameter: <b><span style="color:red">class()</span></b>.
 +
 +
Default konstruktorn initierar klassens datamedlemmar till <b><span style="color:red">defaultvärden</span></b>.
 +
 +
Defaultvärdena är beroende av medlemmarnns datatyper: Taltypernas defaultvärde är <b><span style="color:red">0</span></b>.
 +
 +
String:s defaultvärde är <b><span style="color:red">" "</span></b>. Referensernas defaultvärde är <b><span style="color:red">null</span></b> osv.
 +
</big>
 +
</div>
 +
 +
 +
= <b><span style="color:#931136">Programmet EncapsulationD</span></b> =
 +
<div class="ovnE">
 +
[[Image: EncapsulationD.jpg]]
 +
 +
 +
<big>Klassen CircleD:s datamedlem <b><span style="color:red">radius</span></b> är fortfarande oåtkomlig här pga <b><span style="color:red">private</span></b>.
 +
 +
Alla objekt måste skapas genom att anropa en <b><span style="color:red">konstruktor</span></b> vare sig default eller egendefinierad.
 +
</big>
 +
</div>
 +
 +
 +
= <b><span style="color:#931136">Ett körexempel</span></b> =
 +
<div class="ovnE">
 +
<div style="border:1px solid black;display:inline-table;margin-left: 0px;"> [[Image: Gando.jpg]]</div>
 +
</div>
 +
 +
 +
= <b><span style="color:#931136">Flera konstruktorer: Klassen Account</span></b> =
 +
<div class="ovnC">
 +
[[Image: Account.jpg]]
 +
 +
 +
<big>Datamedlemmarna har ingen explicit åtkomstmodifierare, varken private eller public.
 +
 +
Men de är ändå <b><span style="color:red">private</span></b> by default pga klassens inkapslingsegenskap.
 +
 +
De kan initieras endast via de publika konstruktorerna när ett objekt skapas.
 +
</big>
 +
</div>
 +
 +
 +
= <b><span style="color:#931136">Programmet CreateAccount</span></b> =
 +
<div class="ovnC">
 +
[[Image: CreateAccount.jpg]]
 +
 +
 +
<big>"Ompekning" därför att samma referens <b><span style="color:red">myAccount</span></b> används för att peka på det andra objektet.
 +
 +
S.k. <i>Garbage collector</i> rensar automatiskt det första, numera orefererade objektets minnesutrymme.
 +
 +
Ompekning motsvarar överskrivning av variablers värden hos variabler av enkel datatyp.
 +
</big>
 +
</div>
 +
 +
 +
= <b><span style="color:#931136">Ett körexempel</span></b> =
 +
<div class="ovnC">
 +
<div style="border:1px solid black;display:inline-table;margin-left: 0px;"> [[Image: KorexFlera.jpg]]</div>
 +
</div>
  
  

Nuvarande version från 24 november 2022 kl. 20.02

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


1.4   Användning av klasser

Anv Klasser.jpg


1. Deklaration av en klass

Klassen Emp

Emp.jpg


2. Definition av ett objekt

3. Åtkomst till objektets medlemmar

Programmet EmpTest

Emp Test.jpg


Ett körexempel

EmpTestKorex.jpg


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.


Klassen CircleD med default konstruktor

CircleD.jpg


class skapar automatiskt en default konstruktor som inte har någon parameter: class().

Default konstruktorn initierar klassens datamedlemmar till defaultvärden.

Defaultvärdena är beroende av medlemmarnns datatyper: Taltypernas defaultvärde är 0.

String:s defaultvärde är " ". Referensernas defaultvärde är null osv.


Programmet EncapsulationD

EncapsulationD.jpg


Klassen CircleD:s datamedlem radius är fortfarande oåtkomlig här pga private.

Alla objekt måste skapas genom att anropa en konstruktor vare sig default eller egendefinierad.


Ett körexempel

Gando.jpg


Flera konstruktorer: Klassen Account

Account.jpg


Datamedlemmarna har ingen explicit åtkomstmodifierare, varken private eller public.

Men de är ändå private by default pga klassens inkapslingsegenskap.

De kan initieras endast via de publika konstruktorerna när ett objekt skapas.


Programmet CreateAccount

CreateAccount.jpg


"Ompekning" därför att samma referens myAccount används för att peka på det andra objektet.

S.k. Garbage collector rensar automatiskt det första, numera orefererade objektets minnesutrymme.

Ompekning motsvarar överskrivning av variablers värden hos variabler av enkel datatyp.


Ett körexempel

KorexFlera.jpg










Copyright © 2022 TechPages AB. All Rights Reserved.