You are on page 1of 12

Vežba 02

Kreirajte novi projekat pod nazvom PrimerUgnjezdeneKlase i iskopirajte kod i prodjite kroz komentare
koje sam ostavio kako biste bolje razumeli vezbu. Ukoliko imate pitanja, slobodno se obratite putem
mejla na levai@vtsns.edu.rs.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace PrimerUgnjezdeneKlase

public class FAP

//UKOLIKO IMATE PITANJE ili NEDOUMICU pisite na mejl levai@vtsns.edu.rs

//fabrika Automobila Priboj je klasa koja sadrzi podklase vozilo, motor i klase autobus i kamion koje
nasledjuju klasu vozilo

//U ovom primeru cemo proci kroz pojmove kao sto su nasledjivanje, kompozijija, polimorfizam i
interfejs

//takodje cemo saznati kako da kreiramo recnik tj. Dictionary, foreach petlju, Task.Delay funkciju

public const int PIB= 101206591;//definisanje konstante


private int brojacVozila = 2;//definisanje brojaca koji ce se povecavati kako dodajemo novo vozilo i
pomocu kog broja cemo pristupiti pojedinacnom objetu

private Dictionary<int,FAP.Vozilo> VozilaNaStanju = new Dictionary<int,FAP.Vozilo>()//definisanje


recnika koji sadrzi unose parova kljuca i vrednosti eng. key value pair

{1,new Autobus(Autobus.ModelAutobusa.A5374CNG) },//dodavanje pojedina;nog elementa


recnika sa njegovim kljucem

{2,new Kamion(FAP.Kamion.ModelKamiona.Vojni) }

};

public void IspisStanjaVozila()//metoda klase FAP pomocu koje mozemo da vidimo koja su nam
vozila na stanju

foreach (var item in VozilaNaStanju)//petlja foreach koja omogucava da pristupimo pojedinacnom


elementu i recnika

Console.WriteLine(" ID vozila : "+item.Key+"\n\r "+item.Value.ToString());//za svaki poedinacni


elemenat ispisujemo njegov kljuc i vrenost tipa string odnosno povratnu vrednost metode ToString() za
svaku klasu je posebno overrideovana sto je primer polimorfizma

Console.ReadLine();//metoda klase Console koja prima bilo sta sto korisnik unese sa tastature

public void DodajNovKamionNaStanje(FAP.Autobus.ModelAutobusa m)//metoda koja prima enum


parametar modela autobusa kako bi ga dodala u recnik. modeli su definisani u samoj klasi Autobus

FAP.Autobus a = new FAP.Autobus(m); //poziv konstruktora klase autobus i prosedjivanje


parametara metode kao parametar konstruktoru
brojacVozila++;//povecavanje brojaca kako bi se svaki unos razlikovao medjusobno

VozilaNaStanju.Add(brojacVozila,a);//poziv metode Add nad recnikom i prosledjivanje vrednosti


brojaca i novog objekta autobusa kao parametre koji ce se dodati u recnik

public void DodajNovAutobusNaStanje(FAP.Kamion.ModelKamiona m)//metoda za dodavanje


kamiona radi isto kao i prethpodna, jedina razlika je sto prima parametar modela kamiona koji je
definisan u klasi kamion

FAP.Kamion k = new FAP.Kamion(m);

brojacVozila++;

VozilaNaStanju.Add(brojacVozila,k);

public async void ObrisiVoziloSaStanja()

Console.WriteLine("Pogledajte listu vozila i unesite ID broj vozila kako biste ga izbrisali.");

await Task.Delay(2000);//ostavicemo korisnika da saceka par sekundi taman dok procita prvu
recenicu, a zatim da mu se ispisu sva vozila

this.IspisStanjaVozila(); //poziv metode koja je definisana u klasi FAP i koja ispisuje sva vozila iz
recnika vozila koja su na stanju

string x = Console.ReadLine(); //promenljiva x string i u nju se smesta ono sto korinik unese na
tastaturi i klikne enter

int id;// id je promenljiva koja ukoliko je korisnik uneo vrednost koja moze da se konvertuje u tip
int postaje vrednost za koju cemo proveriti da li postoji takav kljuc u recniku i ukoliko postoji obrisacemo
to vozilo iz recnika

if (Int32.TryParse(x, out id))

if(VozilaNaStanju.ContainsKey(id))

if( VozilaNaStanju.Remove(id))

Console.WriteLine("Uspesno ste obrisali vozilo pod idjem "+id);


//ukoliko ono sto je uneo korisnik nije pronadjeno u recniku tada ispijemo poruku da takvo vozilo
ne postoji

Console.WriteLine("Vozilo pod unetim idijem ne postoji.");

public class Vozilo //klasa vozilo je nadklasa klasa autobus i kamion te ona ima svojstva zajednicka
za te klase

protected readonly string Marka = "FAP";//marka je za sva vozila ista i to FAP

protected string Naziv { get; set; }//obe podklase ce imati naziv

protected Motor MotorVozila { get; set; }//svako vozilo mora da ima motor te se njegov objekat
ovde definise kao svojstvo sto je primer Kompozicije

protected bool Cipovan { get; set; }//true ili false vrednost true ako je cipovano vozilo i false ako
nije

protected Vozilo()//podrazumevani konstruktor bez parametara

Naziv = Marka;

Cipovan = false;

//Prepravljamo metodu ToString() kako bivracala vrednst koja je nama potrebna

public override string ToString()

string str = "Vozilo pod nazivom: " + Naziv + ",\r\n Firme " + Marka + MotorVozila.ToString();

if (Cipovan)

str += " je cipovan.";


else

str += " nije cipovan.";

return str;

public class Motor //ugnjezdena klasa motora sa 2 enuma i tri int svojstva koja su zajednicka za
sve motore

private int Kubikaza;

private int SnagaKW;

private int SnagaKS;

private EUstandard TipMotora;

private VrstaGoriva Gorivo;

public enum VrstaGoriva//definisane vrste goriva

dizel,

benzin,

plin

public enum EUstandard//vrste EU standarda motora

EU3,

EU4,

EU5
}

public Motor(EUstandard TipMotora, VrstaGoriva Gorivo,int Kubikaza, int SnagaKW,int


SnagaKS)

//konstruktor motora sa paramettrima

this.Kubikaza = Kubikaza;

this.SnagaKW = SnagaKW;

this.SnagaKS = SnagaKS;

this.TipMotora = TipMotora;

this.Gorivo = Gorivo;

public override string ToString()

string str = "\r\n Motor EU standarda :"+TipMotora.ToString()+" kubikaze: " + Kubikaza +


",\r\n Konjskih snaga :" + SnagaKS + ",\r\n snage u KW: " + SnagaKW+ ",\r\n koristi " +Gorivo.ToString()+
"gorivo";

return str;

//Javna metoda kojoj se moze pristupiti iz klase Auta ona proverava da li je snaga veca od nula i
ako jeste tada moze da poveca snagu

public bool PovecajSnaguMotora()

if (SnagaKW > 0)

SnagaKW = Convert.ToInt32(SnagaKW * 1.3);


SnagaKS = Convert.ToInt32(SnagaKW * 1.35962);

return true;

return false;

public interface Prepravka { string Cipovanje(); }

//interfejs prepravka je najjednostavniji primer interfejsa gde je definisana metoda koja mora da se
implementira u klasi

// koja implementira interfejs, nije bitno kakvo ce biti telo te metode,

// bitno je da ona ima potpis kakav je definisan u interfejsu

public class Autobus : Vozilo,Prepravka

public ModelAutobusa Model;

public Autobus(ModelAutobusa model):base()//konstruktor klase autobus ima parametr modela


autobusa

Model = model;

SpecifikacijaNaOsnovuModela();//poziva se metoda koja ce na osnovu parametra da izvrsi


specifikaciju motora koji je poterban za vozilo

}
public enum ModelAutobusa

A5374CNG,

A537,

A5375

private void SpecifikacijaNaOsnovuModela()

{//pomocu switch case grananja mozemo u zavisnoti od modela da kreiramo drugaciji objekat
klase motor

switch (Model)

case ModelAutobusa.A5374CNG:

Naziv = "Gradski";

this.MotorVozila = new Motor(Motor.EUstandard.EU4, Motor.VrstaGoriva.plin, 8300, 209,


280);

break;

case ModelAutobusa.A537:

Naziv = "Gradski";

this.MotorVozila = new Motor(Motor.EUstandard.EU3, Motor.VrstaGoriva.benzin, 11000,


190, 260);

break;

case ModelAutobusa.A5375:

Naziv = "Gradski niskopodni";

this.MotorVozila = new Motor(Motor.EUstandard.EU5, Motor.VrstaGoriva.dizel, 11970,


230, 299);

break;

}
}

public string Cipovanje()

//metoda za unapredjivanje specifikacija motora auta.

//izvrsavanje metode zavisi od tipa auta i da li je vec cipovan

if (Cipovan)

return "Vas Autobus je vec cipovan. Nije preporucljivo dodatno povecavanje snage.";

Cipovan = MotorVozila.PovecajSnaguMotora();//ukoliko je moguce povecati snagu motora


ona ce biti povecana za 30%

if (Cipovan)//ukoliko je uspelo cipovanje povratna vrednost ce biti specifikacija motora

{ return "Vase vozilo je sad cipovan i njegove specifikacije su: " + MotorVozila.ToString(); }

else { return "Za zadato vozilo nije moguce obaviti cipovanje jer nije definisan kako je
predvidjeno."; }

public class Kamion : Vozilo,Prepravka//klasa kamion je slicna klasi autobus te mislim da nij
epotrebno dodatno objasnjenje

public ModelKamiona Model;


public Kamion(ModelKamiona model) : base()

Model = model;

SpecifikacijaNaOsnovuModela();

public string Cipovanje()

//metoda za unapredjivanje specifikacija motora auta.

//izvrsavanje metode zavisi od tipa auta i da li je vec cipovan

if (Cipovan)

return "Vas Kamion je vec cipovan. Nije preporucljivo dodatno povecavanje snage.";

Cipovan = MotorVozila.PovecajSnaguMotora();//ukoliko je moguce povecati snagu motora ona


ce biti povecana za 30%

if (Cipovan)//ukoliko je uspelo cipovanje povratna vrednost ce biti specifikacija motora

{ return "Vase vozilo je sad cipovan i njegove specifikacije su: " + MotorVozila.ToString(); }

else { return "Za zadato vozilo nije moguce obaviti cipovanje jer nije definisan kako je
predvidjeno."; }

private void SpecifikacijaNaOsnovuModela()


{

Naziv = Model.ToString();

switch (Model)

case ModelKamiona.Sanducar:

this.MotorVozila = new Motor(Motor.EUstandard.EU5, Motor.VrstaGoriva.dizel, 8900, 265,


360);

break;

case ModelKamiona.Tegljac:

this.MotorVozila = new Motor(Motor.EUstandard.EU5, Motor.VrstaGoriva.benzin, 11970,


295, 401);

break;

case ModelKamiona.Kiper:

this.MotorVozila = new Motor(Motor.EUstandard.EU5, Motor.VrstaGoriva.benzin, 11970,


295, 401);

break;

case ModelKamiona.Vojni:

this.MotorVozila = new Motor(Motor.EUstandard.EU3, Motor.VrstaGoriva.dizel, 11970,


295, 401);

break;

public enum ModelKamiona

Sanducar,

Tegljac,
Kiper,

Vojni

class Program

//u glavnoj metodi programa cemo kreirati vise automobila i pozvati moguce metode klasa auta i
motora

static void Main(string[] args)

Console.WriteLine("Hello World by FAP!"+FAP.PIB);

FAP fap = new FAP();

//ispis svih vozila na stanju

fap.IspisStanjaVozila();

//kreiranje novog vozila

fap.DodajNovAutobusNaStanje(FAP.Kamion.ModelKamiona.Vojni);

//ispisivanje kako bismo videli da li je stvarno unet objekat vozila odnosno kamiona u ovom
slucaju

fap.IspisStanjaVozila();

//brisanje vozila iz recnika

fap.ObrisiVoziloSaStanja();

Console.WriteLine("Kliknuti enter za izlaz iz programa.");

Console.ReadLine();}}}

You might also like