( materijal koji je koristio nastavnik za ovaj deo časa: Konstruktori i destruktori  .... ( iako je ovde naglasak na programskom jeziku C++ )


Da ponovimo:

Konstruktori

U C#-u pri deklaraciji neke instance klase, objekta, rezervše se prostor za adresu objekta (referencu) a sam objekat se kreira korišćenjem operatora new.

  <ime klase> <ime objekta> = new <ime klase>(<lista parametara>) ;

Operator new vraća adresu novog objekta koja se dodeljuje imenu objekta.

Konstruktor je metod koji se poziva pri kreiranju objekta. Konstruktori su sastavni deo svake klase i nose njeno ime. Pozivom konstruktora objekat počinje svoj život. Klasa može imati više konstruktora koji se razlikuju po listi parametara. Lista parametara najčešće sadrži vrednosti kojima inicijalizujemo atribute objekta, a može biti i prazna.

Ako pogramer ne napiše ni jedan konstruktor, programski prevodilac će napraviti podrazumevani konstruktor (konstruktor bez parametara, numeričkim tipovima dodeljuje 0, logičkim atributima dodeljuje vrednost false, referentne atribute postavlja na null).

Ako pišemo više konstruktora, kako svi imaju ime klase, moraju se razlikovati po listi parametara, tj. po broju ili tipu parametara.

class Kompleksni
{
private double re;
private double im;

public double Re
{
get { return re; }
set { re = value; }
}

public double Im
{
get { return im; }
set { im = value; }
}

public void Prikaz()
{
Console.Write(re);
if (im > 0)
Console.WriteLine("+j" + im);
else
Console.WriteLine("-j" + -im);
}
}

Za klasu Kompleksni, definisanu u prethodnom delu, možemo definisati sledeće konstruktore:

  • Konstruktor bez parametara koji postavljaju atributi - re i im na početnu vrednost 0

  public Kompleksni()
{
re = 0;
im = 0;
}
  • Konstruktor koji za parametar ima početne vrednosti za parametre re i im:

  public Kompleksni(double realni, double imaginarni)
{
re = realni;
im = imaginarni;
}

  • Konstruktor koji za parametar ima samo realni deo (a imaginarni deo će postaviti na 0):
  public Kompleksni(double realni)
{
re = realni;
im = 0;
}

  •  može da bude i još različitih izvedbi konstruktora ...

•Tzv konstruktor kopije koji za parametar ima drugi objekat klase Kompleksni ( broj ) i u kojem slučaju će se re i im postaviti na vrednost istih atributa parametra broj.

  public Kompleksni(Kompleksni broj)
{
re = broj.Re;
im = broj.Im;
}

Ovde obratite pažnju da se koriste propertiji da bi se postavile ili očitale vrednosti realnog ili imaginarnog dela kompleksnog broja !

A kako smo to upotrebili u zadatku:

( Prvo pokušajte da uradite sami. )

Rešenje, tj kompletan programski kod sa časa: program2.cs


Literatura:

Stanka Matković, Mijodrag Đurišić:MALA ŠKOLA OBJEKTNO ORIJENTISANOG PROGRAMIRANjA U PROGRAMSKOM JEZIKU C# (http://elib.mi.sanu.ac.rs/files/journals/nm/238/nm54406.pdf)


Destruktori

Šta je destruktor?

Kao i konstruktor, destruktor je specijalna metoda koja služi za čišćenje resursa memorije. Za razliku od konstruktora, koji se kao metoda uvek izvršava prva, destruktor je specijalna metoda koja se uvek izvršava zadnja. Iskusni C++ programeri često koriste destruktore, ne samo radi čišćenja resursa nego i za dobijanje informacija u procesu otklanjanja grešaka i izvršavanja drugih zadataka. Destruktore u C++ programskom jeziku možete pogledati ovde.

Međutim u C# programskom jeziku, destruktori se mnogo ređe koriste. Razlog je zato što u .Net Framework okruženju u jeziku C# reference objekata uklanja sakupljač otpadaka. To podrazumeva da može doći do kašnjenja stvarnog brisanja objekata u odnosu na izlaženje reference van dometa.

(ovo gore je opisan proces kojim redom destruktor uništava klase u memoriji )


U Visal Basic-u destruktor je poznat kao finalizator, potprogram Sub Finalize() koji sadrži kod za čišćenje kada je klasa uništena, ali u C# programskom jeziku se destruktor piše sa istim imenom klase ali sa znakom tilda ~ ispred metode. Sintaksa za destruktora u C# programskom jeziku je sledeća:

class ime_klase 
{
            ~ ime_klase()
           {

           }
}


Najvažnija stvar koju trebate da znate za destruktore je da njih ne možete definisati u strukturama, nego samo u klasama. Svaka klasa može imati samo jedan destruktor. Destruktori se ne mogu nasleđivati niti preopterećivati. Ne mogu se ni pozivati jer se sami automatski pozivaju i destruktori ne mogu imati niti modifikatore niti parametre. I još jedan savet. Nemojte nikad pisati prazne destruktore.

Kako se koristi destruktor u kodu?

pogledajte u videu:


( izvor, www.manuelradovanovic.com  )

Last modified: Tuesday, 17 November 2020, 1:35 PM