Difference between revisions of "6236 Programmering I Agenda/Inheritance"

From Teknologisk videncenter
Jump to: navigation, search
(Created page with "En meget brugt ting i objektorienteret programmering er muligheden for at arve fra andre klasser. Lad os antage at vi har fået en ny type af konto der kan spærres for hævning...")
 
 
(6 intermediate revisions by the same user not shown)
Line 6: Line 6:
  
 
<source lang=csharp>
 
<source lang=csharp>
    class Opsparing : Konto
+
class Opsparing : Konto
    {
+
{
        //fri Dato angiver hvornår pengene kan hæves fra
+
//fri Dato angiver hvornår pengene kan hæves fra
        public DateTime friDato;
+
public DateTime friDato;
  
        //Konstruktøren tager saldo som parameter på samme måde og sender input direkte videre til base (Konto).
+
//Konstruktøren tager saldo som parameter på samme måde og sender input direkte videre til base (Konto).
        public Opsparing(double saldo):base (saldo)
+
public Opsparing(double saldo):base (saldo)
        {
+
{
  
        }
+
}
    }
+
}
 +
</source>
 +
I main anvendes klassen på samme måde som Konto
 +
 
 +
<source lang=csharp>
 +
static void Main(string[] args)
 +
{
 +
//Her laves en ny variable af type Konto
 +
Opsparing k = new Opsparing(25000);
 +
k.oplysSaldo();
 +
}
 +
</source>
 +
 
 +
Hvis nogen prøver at hæve penge før de er frigivet er vi nødt til at stoppe det. Derfor er Opsparing nødt til at have sin egen haev() metode.
 +
 
 +
Det første man gør er i Konto at skrive virtual ved haev(). Derefter kan man i Opsparing få lov at override metoden.
 +
 
 +
Det betyder at for objekter (variable) af typen Konto vil den almindelige haev() blive kaldt, men for opsparing vil den nye haev() blive kaldt.
 +
 +
 
 +
<source lang=csharp>
 +
class Konto
 +
{
 +
...
 +
virtual public void haev()
 +
{
 +
System.Console.WriteLine("Hvor meget vil du hæve?");
 +
Double beloeb = Convert.ToDouble(System.Console.ReadLine());
 +
saldo = saldo - beloeb;
 +
}
 +
....
 +
}
 +
 
 +
 
 +
class Opsparing : Konto
 +
{
 +
....
 +
public override void haev()
 +
{
 +
if (DateTime.Now > friDato)
 +
{
 +
base.haev();
 +
}
 +
else
 +
{
 +
System.Console.WriteLine("Der kan ikke hæves fra kontoen før " + friDato);
 +
}
 +
}
 +
}
 +
 
 +
 
 +
class Program
 +
{
 +
static void Main(string[] args)
 +
{
 +
//Her laves en ny variable af type Konto
 +
Opsparing k = new Opsparing(25000);
 +
k.friDato = new DateTime(2020, 1, 1);
 +
k.oplysSaldo();
 +
k.haev();
 +
}
 +
}
 +
</source>
 +
 
 +
<pre style="background:rgba(0,0,0,1); color:#FFFFFF">
 +
 
 +
Din saldo er 25000
 +
Der kan ikke hæves fra kontoen før 01-01-2020 00:00:00
 +
 
 +
</pre>
 +
 
 +
Hvis man øsnker at overfører friDato i konstruktøren til Opsparing er det muligt således.
 +
 
 +
<source lang=csharp>
 +
class Opsparing : Konto
 +
{
 +
public DateTime friDato;
 +
 
 +
public Opsparing(double saldo, DateTime friDato):base (saldo)
 +
{
 +
this.friDato = friDato;
 +
}
 +
</source>
 +
 
 +
I main
 +
<source lang=csharp>
 +
static void Main(string[] args)
 +
{
 +
//Her laves en ny variable af type Konto
 +
Opsparing k = new Opsparing(25000,new DateTime(2020,1,1);
 +
k.oplysSaldo();
 +
k.haev();
 
</source>
 
</source>

Latest revision as of 15:23, 30 November 2015

En meget brugt ting i objektorienteret programmering er muligheden for at arve fra andre klasser.

Lad os antage at vi har fået en ny type af konto der kan spærres for hævninger indtil en bestemt dato.

Det kan vi gøre ved at oprette en ny Class der har attributten friDato og arver fra Konto. Derved får vi en klasse der kan alt som Konto kan, plus det der er tilføjet i den nye klasse.

class Opsparing : Konto
{
	//fri Dato angiver hvornår pengene kan hæves fra
	public DateTime friDato;

	//Konstruktøren tager saldo som parameter på samme måde og sender input direkte videre til base (Konto).
	public Opsparing(double saldo):base (saldo)
	{

	}
}

I main anvendes klassen på samme måde som Konto

static void Main(string[] args)
{
	//Her laves en ny variable af type Konto
	Opsparing k = new Opsparing(25000);
	k.oplysSaldo();
}

Hvis nogen prøver at hæve penge før de er frigivet er vi nødt til at stoppe det. Derfor er Opsparing nødt til at have sin egen haev() metode.

Det første man gør er i Konto at skrive virtual ved haev(). Derefter kan man i Opsparing få lov at override metoden.

Det betyder at for objekter (variable) af typen Konto vil den almindelige haev() blive kaldt, men for opsparing vil den nye haev() blive kaldt.


class Konto
{
	...
	virtual public void haev()
	{
		System.Console.WriteLine("Hvor meget vil du hæve?");
		Double beloeb = Convert.ToDouble(System.Console.ReadLine());
		saldo = saldo - beloeb;
	}
	....
}


class Opsparing : Konto
{
	....
	public override void haev()
	{
		if (DateTime.Now > friDato)
		{
			base.haev();
		}
		else
		{
			System.Console.WriteLine("Der kan ikke hæves fra kontoen før " + friDato);
		}
	}
}


class Program
{
	static void Main(string[] args)
	{
		//Her laves en ny variable af type Konto
		Opsparing k = new Opsparing(25000);
		k.friDato = new DateTime(2020, 1, 1);
		k.oplysSaldo();
		k.haev();
	}
}
 

Din saldo er 25000
Der kan ikke hæves fra kontoen før 01-01-2020 00:00:00

Hvis man øsnker at overfører friDato i konstruktøren til Opsparing er det muligt således.

class Opsparing : Konto
{
	public DateTime friDato;

	public Opsparing(double saldo, DateTime friDato):base (saldo)
	{
		this.friDato = friDato;
	}

I main

static void Main(string[] args)
{
	//Her laves en ny variable af type Konto
	Opsparing k = new Opsparing(25000,new DateTime(2020,1,1);
	k.oplysSaldo();
	k.haev();