sobota 7. októbra 2017

C# základné pojmy





I.       Základné pojmy a kľúčové slová

Výraz, kľúčové slovo
Popis
Zdroje, odkazy
Trieda
Definícia nového typu, predpisu pre objekty.

Objekt
Inštancia typu. Reálny objekt s identitou.

Modifikátory prístupu
Kľúčové slová ovplyvňujúce povolenie k prístupu k danému prvku (triede, metóde ...). podporované modifikátory prístupu v jazyku C# sú: public, protected, private, internal, protected internal.

Členy tried
To, čo sa môže nachádzať v triede. V jazyku C# sú to metódy, členské premenné (fields) a vlastnosti (properties).

Metódy
Metódy triedy implementujú správanie danej triedy. Pojem metóda je iba iným zápisom pojmu funkcia z jazyka C.

Konštruktor
Špeciálna metóda triedy použitá pre vytvorenie a inicializáciu inšancie triedy (teda pre vytvorenie objektu). Musí spĺňať tieto podmienky: má rovnaké meno ako trieda, nemá návratovú hodnotu.

Štandardný (default) konštruktor
Konštruktor bez parametrov, ktorý je v .NET vygenerovaný automaticky, pri neprítomnosti iného konštruktora v tele triedy.

this
Toto kľúčové slovo odkazuje na aktuálny objekt (aktuálnu inštanciu triedy)

Členské premenné (fields)
Premenné vyjadrujúce vnútorný stav objektu triedy, alebo samotnej triedy. Z angličtiny sa neprekladá ako polia, pretože pojem polia už v programátorskom slovníku existuje pre označenie priestoru pre uloženie niekoľkých položiek rovnakého typu.

                 
II.      Prídavné informácie k cvičeniu

Vytváranie nových typov
Tradičné procedurálne programovacie jazyky poskytujú množinu dátových typov presne ako jazyk C#. Príkladmi týchto typov sú int, long, char, string, ... . Inovácia OO jazykov (ako C++, C# a Java) je, že používateľ môže do programu pridávať vlastné typy, ktoré reprezentujú "veci" v jeho problémovej doméne.

Doména problému (The problem domain) je samotná problematika, oblasť, ktorú sa vývojár snaží modelovať, alebo inak riešiť vo svojom programe. Pre komerčné programy je touto doménou väčšinou oblasť obchodu (ako napríklad záznamy o predaji, alebo iné marketingové záležitosti). Problémová doména môže byť o akejkoľvek úlohe, ktorá je pri programovaní vytýčená. Ak povedzme pracujete na nejakej bojovej simulácii potom je Vašou doménou problému povedzme charakteristika bojových podmienok, použité zbrane, alebo terén.

Táto schopnosť rozšírenia jazyka o nové typy je veľmi mocným nástrojom. Nové typy v jazyku C# sa vytvárajú kľúčovým slovom class (trieda). Triedy majú správanie a majú aj svoj stav. Správanie modelujeme pomocou metód (v nie OO jazykoch sú tieto nazývané procedúry, alebo funkcie). Rovnako máme členy tried pre reprezentáciu stavu, tieto členy nazývame členské premenné, alebo premenné triedy (sú to vlastne premenné známe z nie OO jazykov). Jazyk C# má tiež jednu špecialitu, ktorou sú vlastnosti (properties). Tieto sú akési virtuálne premenné, ktoré poskytujú objektový prístup k skutočným členským premenným, navyše ale poskytujú možnosť pridať rôzne akcie k operácii čítania, alebo zápisu do členskej premennej. Svojim spôsobom nahradzujú metódy pre prístup k zapuzdreným členským premenným (niekedy sa tieto nazývali settery, alebo gettery).

Triedy vs. objekty
Hlavný rozdiel medzi triedou a objektom je, že trieda je definíciou nového typu, je akýmsi predpisom, a objekt je inštanciou tohto typu s alokovaným miestom v pamäti, s vlastnou identitou

Definícia triedy v jazyku C#:

[atribúty][modifikátory prístupu]  class identifikátor [:základná trieda] [telo triedy]


Modifikátory prístupu
Možné modifikátory prístupu pre triedy a pre členy tried vo väčšine OO jazykov sú:
• public
• private
• protected
Jazyk C# navyše pridáva modifikátory prístupu pre obmedzenia v rámci jednej kompletácie aplikácie (assembly):
• internal
• protected internal

Public access (verejný prístup) že daný člen takto označený je viditeľný a použiteľný z akéhokoľvek miesta programu (z akejkoľvek triedy).
Private access (súkromný prístup) znamená, že člen je viditeľný iba v rámci triedy, kde bol definovaný (nikde inde, v žiadnej inej triede).
Protected access (chránený prístup) je ako súkromný prístup, okrem toho, že k daným členom majú prístup aj triedy (a samozrejme aj ich inštancie), ktoré sú odvodené od triedy, v ktorej je daný člen definovaný.
Internal access (vnútorný prístup) Týka sa kompletácie (assembly). Je ako súkromný prístup, s tým že členy takto označené sú viditeľné triedam v rámci celej kompletácie (assembly). Assembly je základnou jednotkou vytvárania aplikácie. Za assembly je možné považovať povedzme jeden spustiteľný súbor.exe, alebo jednu knižnicu .dll.
Protected internal (chránený vnútorný prístup) je zjednotením vnútorného a chráneného prístupu (internal + protected), tzn. : trieda (alebo metóda) je súkromná (private) pre všetky triedy, okrem odvodených tried a tried v rovnakej assembly.


Členy tried

Triedy pozostávajú z metód, členských premenných a vlastností (properties).

Metódy
Metódy triedy implementujú správanie danej triedy. Všetky metódy v C# patria do nejakej z definovaných tried (metóda sa nemôže nachádzať mimo triedy). Metóda môže mať parametre, ale samozrejme to nie je vyžadované. Metóda môže mať akýkoľvek počet parametrov a každý z nich musí mať definovaný typ. Metóda taktiež môže vracať hodnotu, čo je indikované návratovým typom metódy uvedeným v definícii pred jej identifikátorom.

// nazov metody je "MyMethod", vracia int, nema parametre
public int myMethod();
// nazov metody je "SecondMethod", vracia double, ocakava 2 argumenty
public double SecondMethod(int p1, string p2);
// vracia void (teda nic) a ma 1 parameter typu int (ocakava 1 argument typu int)
public void ThirdMethod(int x);
Konštruktor
Konštruktor je špeciálna metóda triedy, použitá pre vytvorenie správne inicializovanej inštancie triedy. Konštruktor musí mať rovnaké meno ako samotná trieda, v ktorej je definovaný. Konštruktory tiež nesmú mať definovanú žiadnu návratovú hodnotu, ani typu void. Účelom konštruktorov je vytvoriť inštanciu a inicializovať hodnoty jej členov na implicitné hodnoty. Volanie konštruktora je vykonané prekladačom, Vaše programy preto nikdy nebudú žiadny konštruktor volať explicitne v zdrojovom kóde.

public class Student
{
//clenske premenne
private int studentAge;
private string studentName;
//Specialna metoda - konstruktor
public Student(int age, string name)
{
//inicializacia clenskych premennych
studentAge    = age;
studentName   = name;
}
}

Štandardný konštruktor (default constructor)
Konštruktor je z pohľadu parametrov ako metóda, môže mať ľubovoľný počet parametrov, teda aj žiadne. V tomto prípade, ak konštruktor neočakáva žiadne argumenty, je nazývaný štandardný konštruktor. Ak v triede nešpecifikujeme žiadny konštruktor, do výsledného skompilovaného kódu bude automaticky vygenerovaný štandardný konštruktor inicializujúci členské premenné na štandardné hodnoty (napríklad čísla int na hodnotu 0, ...). Takto vyzerá štandardný konštruktor s prázdnym telom:

// standardny konstruktor
public Student()
{
}

Kľúčové slovo this

Kľúčové slovo this predstavuje referenciu na aktuálny objekt. V konštruktore kľúčové slovo this referuje na objekt, ktorý je vytváraný. Je bežné pomenovávať súkromné členské premenné rovnakým menom ako argumenty odovzdávané konštruktoru. V tomto prípade sa kľúčové slovo this používa na odlíšenie členských premenných od parametrov:

public class Student
{
private int age;
private string name;

public Student(int age, string name)
{
//pouzitie this na odlisenie clenskych premennych a parametrov konstruktora
this.age      = age;
this.name     = name;
}
}





Členské premenné

Niekedy sa členské premenné nazývajú aj premenné triedy, alebo ako anglické fields. Úloha členských premenných je uchovávanie stavu objektu. Definícia členských premenných je veľmi podobná ako definícia lokálnych premenných v metódach, rozdiel je len v tom, že sa nachádzajú v tele triedy, mimo tela metódy a je možné pred ich definíciu pridať špecifikátor prístupu:

private int age = 18; //sukromna clenska premenna typu int,inicializacia pri definicii hodnotou 18
private string name = “noname”; //sukromna clenska premenna typu string, inicializacia pri definicii retazcom "noname"

Ak nešpecifikujeme modifikátor prístupu (v tomto prípade private), členy tried sú implicitne považované za súkromné (private). Toto podporuje skrývanie dát a tým základnú vlastnosť OOP - uzavretosť (encapsulation).

Vytváranie inštancií

Akonáhle je objekt inštanciovaný (je vytváraná jeho inštancia), je zavolaný konštruktor triedy, ktorej objekt je vytváraný. Inštanciu triedy, teda objekt, vytvárame pomocou kľúčového slova new:

//vytvorenie instancie triedy Student a ulozenie referencie na nu do premennej stud typu Student
Student stud = new Student();


Táto konštrukcia je v jazyku C# veľmi často používaná:   Typ identifikator = new Typ();                  // !!!

(Ako ste si iste všimli, vo Visual Studiu .NET je kľúčové slovo new označené modrou farbou. Takto sú označované všetky kľúčové slová, aby neboli omylom použité ako názvy premenných, čo by vyvolalo chybu).

Príklady vytvárania inštancií:
Dog rex = new Dog();
Button btOK = new Button(“Ok”); //vytvorenie instancie, vola sa konstruktor s jednym string parametrom
Student fero = new Student(23,”Fero);//vytvorenie instancie, vola sa konstruktor s dvoma parametrami

Akonáhle máme vytvorenú inštanciu, je možné na objekte volať metódy:
fero.DisplayInfo();  // volanie metody na objekte fero


Preťažovanie konštruktora
Je možné vytvoriť viac ako jeden konštruktor v jednej triede. Toto je známe pod pojmom preťažovanie (overloading) konštruktorov a poskytuje možnosť pripraviť viacero konštruktorov s rôznymi parametrami pre viacero možností inštanciovania objektu. Preťaženie konštruktora (alebo akejkoľvek inej metódy) sa vykonáva modifikáciou signatúry. Signatúra je popis metódy pre kompilátor a zahŕňa meno metódy a zoznam parametrov metódy. Keďže trieda môže obsahovať viacero metód odlišujúcich sa v signatúre (meno + parametre), tieto metódy sa môžu líšiť v mene (čo je vlastne odlíšenie úplne inej metódy), alebo v parametroch (čo je preťažovanie). Odlišnosť v parametroch metódy môže byť buď v ich počte, alebo v ich typoch (alebo v oboch). Takto môžeme mať napríklad v jednej triede aj tri konštruktory (alebo aj metódy), prvý majúci jeden parameter typu string, druhý majúci jeden parameter typu int (čo je vlastne modifikácia typu parametra, teda iná signatúra) a tretí s dvoma parametrami typu string (modifikácia počtu parametrov v signatúre, opäť iná signatúra).

III.     Úlohy

1.      Otvorte novú konzolovú aplikáciu v prostredí Visual Studio .NET a pomenujte ju Person.  Premenujte triedu Class1 na Person.
2.      Definujte v tejto triede nasledujúce súkromné členy: name a surname.
3.      Vytvorte novú triedu Address s nasledovnými verejnými reťazcovými členmi (string) address, city, state a zipCode.
4.      Vložte do triedy Person novú členskú premennú s názvom address typu Address.
5.      Vytvorte konštruktor Person s 3 parametrami: name, surname, address.
6.      Pridajte do triedy Person metódu Info( ), ktorá zobrazí všetky informácie o aktuálnom objekte osoby.
7.      V statickej metóde Main vytvorte inštancie dvoch osôb a vypíšte informácie o nich do konzoly (s pomocou už vytvorenej metódy Info).


IV.     Zhrnutie

1       C# poskytuje možnosť rozšíriť preddefinované typy o používateľsky definované typy pomocou tried.
2       Nový typ sa definuje pomocou kľúčového slova class.
3       Inštancie tried nazývame objekty.
4       Prístup k triedam a ich členom je možné kontrolovať pomocou modifikátorov prístupu: public, private, protected, internal, a protected internal.
5       Triedy v jazyku C# pozostávajú z metód, členských premenných a vlastností (properties).
6       Konštruktor je špeciálnou metódou zodpovednou za vytvorenie a inicializáciu inštancie triedy.
7       Kľúčové slovo this vytvára referenciu na aktuálny objekt.
8       Všetky metódy môžu byť preťažené zmenou ich signatúry.

Žiadne komentáre:

Zverejnenie komentára