Vežbe 02

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
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