You are on page 1of 6

LABORATOR 4

C#
MOSTENIRE. POLIMORFISM
1. S se realizeze o aplicaie pentru gestiunea angajailor, clientilor si furnizorilor unei companii (continuare laborator 3)

Etapa 1: Definirea clasei parinte: Companie


class Companie { private string _denumire = string.Empty; private string _telefon = string.Empty; private string _adresa = string.Empty; public Companie() { } public Companie(string denumire, string telefon, string adresa) { _denumire = denumire; _telefon = telefon; _adresa = telefon; } public string Denumire { get { return _denumire; } set { _denumire = value; } } public string Telefon { get { return _telefon; } set { _telefon = value; } } public string Adresa { get { return _adresa; } set { _adresa = value; } } #region functii_helper protected string Formateaza_Detalii_Companie(Companie companie) { string detalii_companie = string.Empty;

detalii_companie = "Compania cu numele-" + companie.Denumire + " are adresa-" + companie.Adresa + " si telefonul-" + companie.Telefon; return detalii_companie; } #endregion #region interfata clasa public void TrimiteEmail (Companie companie) { Console.WriteLine("Nu se poate transmite mesaj catre compania-" + companie.Denumire + ". A fost transmis un mesaj postal la adresa: " + companie.Adresa); } public virtual int GenereazaRaport (Companie companie) { Console.WriteLine("A fost generat raportul pentru compania: " + companie.Denumire + " ......"); Console.WriteLine("Caracteristicile companiei " + companie.Denumire + " sunt: Telefonul este:" + companie.Telefon + " " + "Adresa Companiei este: " + companie.Adresa); return 1; } #endregion }

Etapa 2: Definirea clasei derivata: Client


class Client:Companie { private string _observatii = string.Empty; private string _adresaWeb = string.Empty; private string _adresaEmail = string.Empty; private string _denumire = string.Empty; private string _adresa = string.Empty; private string _telefon = string.Empty; public Client() { } public Client(string observatii, string adresaWeb, string adresaEmail, string denumire, string telefon, string adresa): base(denumire,telefon,adresa) { _observatii = observatii; _adresaEmail = adresaEmail; _adresaWeb = adresaWeb; } public string Observatii { get { return _observatii; } set { _observatii = value; }

} public string AdresaWeb { get { return _adresaWeb; } set { _adresaWeb = value; } } public string AdresaEmail { get { return _adresaEmail; } set { _adresaEmail = value; } } #region interfata_clasei public void TrimiteEmail(Client client) { Console.WriteLine("A fost transmis cu succes mesajul catre clientul-" + client.Denumire + " la adresa: " + client.AdresaEmail); } public override int GenereazaRaport(Companie companie) { Client client = companie as Client; Console.WriteLine("A fost generat raportul pentru clientul: " + companie.Denumire + " ......"); Console.WriteLine("Caracteristicile clientului-" + client.Denumire + " sunt: Adresa web este:" + client.AdresaWeb + " " + "Adresa Email este: " + client.AdresaEmail + " iar observatiile asupra lui: " + client.Observatii); return 1; } #endregion }

Etapa 3: Definirea clasei derivata: Furnizor


class Furnizor:Companie { private string _datainfiintare = string.Empty; private string _adresaWeb = string.Empty; private string _adresaEmail = string.Empty; public Furnizor() { } public Furnizor(string data_infiintare, string adresa_web, string adresa_email) { _datainfiintare = data_infiintare; _adresaWeb = adresa_web; _adresaEmail = adresa_email; }

public string DataInfiintare { get { return _datainfiintare; } set { _datainfiintare = value; } } public string AdresaWeb { get { return _adresaWeb; } set { _adresaWeb = value; } } public string AdresaEmail { get { return _adresaEmail; } set { _adresaEmail = value; } } #region interfata clasei public void TrimiteEmail(Furnizor furnizor) { Console.WriteLine("A fost transmis cu succes mesajul catre furnizorul-" + furnizor.Denumire + " la adresa: " + furnizor.AdresaEmail); } public string DetaliiFurnizor(Furnizor furnizor) { string detaliiFurnizor = furnizor.Formateaza_Detalii_Companie(furnizor); return detaliiFurnizor; } //functie test transmitere prin referinta public void modFurnizor(Furnizor furnizor) { furnizor.DataInfiintare = ""; furnizor.AdresaEmail = ""; furnizor.AdresaWeb = ""; } //functie test transmitere prin valoare public void modValoare(int x) { x = 8; } public override int GenereazaRaport(Companie companie) { Furnizor furnizor = companie as Furnizor; Console.WriteLine("A fost generat raportul pentru furnizorul: " + companie.Denumire + " ......"); Console.WriteLine("Caracteristicile furnizorului " + furnizor.Denumire + " sunt: Adresa web este:" + furnizor.AdresaWeb + " " + "Adresa Email este: " + furnizor.AdresaEmail + " Data infiintarii este: " + furnizor.DataInfiintare); return 1;

} #endregion }

Etapa 4: Utilizarea claselor: Companie, Client, Furnizor in programul principal


#region utilizare_functii_polimorfice Console.WriteLine("****************************************** POLIMORFISM *********************************"); Console.WriteLine("****************************************** POLIMORFISM *********************************"); Companie companie1 = new Companie(); companie1.Adresa = "Strada Domneasca, Nr 15, Galati"; companie1.Denumire = "Alpha SRL"; companie1.Telefon = "416567"; Companie companie2 = new Companie(); companie2.Adresa = "Strada Marmureni, Nr 15, Iasi"; companie2.Denumire = "Beta SA"; companie2.Telefon = "425394"; Companie companie3 = new Companie(); Furnizor furnizor1 = new Furnizor(); furnizor1.Adresa = "Strada Poporului, Nr 13, Bucuresti"; furnizor1.Telefon = "567423"; furnizor1.Denumire = "Piritex SRL"; furnizor1.AdresaWeb = "www.piritex.com"; furnizor1.AdresaEmail = "piritex@yahoo.com"; Furnizor furnizor2 = new Furnizor(); furnizor2.Adresa = "Strada Basarabiei, Nr 23, Galati"; furnizor2.Telefon = "223344"; furnizor2.Denumire = "Xerox SA"; furnizor2.AdresaWeb = "www.xerox.com"; furnizor2.AdresaEmail = "xerox@yahoo.com"; string x = furnizor1.DetaliiFurnizor(furnizor1); #region exemplu transmitere parametri prin referinta //este transmisa adresa obiectului furnizor, modificarile sunt facute pe obiectul in sine //in urma apelului acestei functii, denumirea si cele doua adrese vor fi vide furnizor1.modFurnizor(furnizor1); furnizor1.Denumire = "Piritex SRL"; furnizor1.AdresaWeb = "www.piritex.com"; furnizor1.AdresaEmail = "piritex@yahoo.com"; #endregion #region exemplu transmitere parametri prin valoare //este transmisa o copie, modificarile nu sunt int y = 20; furnizor1.modValoare(y); #endregion

Client client1 = new Client("Client fara probleme", "www.pancronex.ro", "panc@pancronex.ro", "Pancronex", "124389", "Strada Floreasca, Nr. 12, Bucuresti"); Client client2 = new Client("Probleme la achitarea facturilor", "www.adian.ro", "adi@adian.ro", "Adian SRL", "986543", "Strada Mantulesti, Nr. 7, Timisoara"); List<Companie> listaCompanii = new List<Companie>(); listaCompanii.Add(companie1); listaCompanii.Add(companie2); listaCompanii.Add(furnizor1); listaCompanii.Add(furnizor2); listaCompanii.Add(client1); listaCompanii.Add(client2); foreach (Companie comp in listaCompanii) { comp.GenereazaRaport(comp); } #endregion #region apelare metoda clasa derivata, fara folosirea polimorfismului Console.WriteLine("******************ALTERNATIVA LA POLIMORFISM! *********************************"); Console.WriteLine("**************** ALTERNATIVA LA POLIMORFISM! *********************************"); foreach (Companie companie in listaCompanii) { switch (companie.GetType().ToString()) { case "Gestiune.Clase.Companie": companie.TrimiteEmail(companie); break; case "Gestiune.Clase.Client": Client client = companie as Client; client.TrimiteEmail(client); break; case "Gestiune.Clase.Furnizor": Furnizor furnizor = companie as Furnizor; furnizor.TrimiteEmail(furnizor); break; default: break; } } #endregion

TEMA: Sa se realizeze un program, conform specificatiilor prezentate in cartea Beginning C sharp 2008, scrisa de Jack Purdum, pagina 445-463

You might also like