Wzorce projektowe Most

0

Witam
Napisałam kod do mostu z wzorców projektowych ale mam kilka błędów

using System;


public interface ITelewizor 
{

  int Kanal { get; set; }
  void Wlacz();
  void Wylacz();
  void ZmienKanal(int kanal);

}



public class TvLg : ITelewizor 
{

  public TvLg()
  {
      this.Kanal = 1;
  }

  public int Kanal { get; set; }

    public void Wlacz() 
    {
        Console.WriteLine("Telewizor LG włączony.");
    }
 
    public void Wylacz() 
    {
      Console.WriteLine("Telewizor LG wyłączony.");
    }
 
    public void ZmienKanal(int kanal) 
    {
      Console.WriteLine("Telewizor LG, kanał: {0}", kanal);
    }

}



public class TvXiaomi : ITelewizor 
{
 
   public TvXiaomi()
  {
      this.Kanal = 1;
  }

  public int Kanal { get; set; }

    public void Wlacz() 
    {
        Console.WriteLine("Telewizor Xiaomi włączony.");
    }
 
    public void Wylacz() 
    {
        Console.WriteLine("Telewizor Xiaomi wyłączony.");
    }
 
    public void ZmienKanal(int kanal) 
    {
      Console.WriteLine("Telewizor Xiaomi, kanal: {0}", kanal);
    }

}



public abstract class PilotAbstrakcyjny 
{

   
 
    private ITelewizor tv;
 
    public PilotAbstrakcyjny(ITelewizor tv)
    {
    pilotAbstrakcyjny = new PilotAbstrakcyjny();
    }
 
    public void Wlacz()
    {
    wlacz = new Wlacz();
    }
 
    public void Wylacz()
    {
      wylacz = new Wylacz();
    }
    public void ZmienKanal(int kanal)
    {
    zmienKanal = new ZmienKanal();
    
    }
   

}



public class PilotHarmony : PilotAbstrakcyjny 
{
 
    public PilotHarmony(ITelewizor tv) : base(tv) {    }
 
    public void DoWlacz()
    {
        Console.WriteLine("Pilot Harmony włącza telewizor...");
        Wlacz();
    }

    public void DoWylacz()
    {
        Console.WriteLine("Pilot Harmony wyłącza telewizor...");
        Wylacz();
    }

    public void DoZmienKanal()
    {
      Console.WriteLine("Pilot Harmony zmienia kanał...");
        ZmienKanal(kanal);
    }

}


public class PilotPhilips : PilotAbstrakcyjny 
{
    public PilotPhilips(ITelewizor tv) : base(tv) {    }

    public void DoWlacz()
    {
        Console.WriteLine("Pilot Philips włącza telewizor...");
        Wlacz();
    }
    public void DoWylacz()
    {
        Console.WriteLine("Pilot Philips wyłącza telewizor...");
        Wylacz();
    }
    public void DoZmienKanal()
    {
      Console.WriteLine("Pilot Philips zmienia kanał...");
        ZmienKanal(kanal);
    }

}


class MainClass 
{
  public static void Main (string[] args) 
  {

        ITelewizor tv = new TvLg();
        ITelewizor tv = new TvXiaomi();
        PilotHarmony = new pilotHarmony();
        PilotPhilips = new pilotPhilips();
    

        pilotHarmony.DoWlacz();
        Console.WriteLine("Kanał: " + tv.Kanal);
        pilotPhilips.DoZmienKanal(100);
        Console.WriteLine("Kanał: " + tv.Kanal);
        pilotHarmony.DoWylacz();

  }
}

Wydaje mi się że coś nie tak napisałam w klasie Pilot Abstrakcyjny ale niestety nie wiem co mogłabym tam pozmieniać

Bo kod powinien wyświetlać coś takiego:

Pilot Harmony włącza telewizor...
Telewizor LG włączony.
Kanał: 1
Pilot Philips zmienia kanał...
Telewizor LG, kanał: 100
Kanał: 100
Pilot Harmony wyłącza telewizor...
Telewizor LG wyłączony.

Proszę o pomoc albo chociaż nakierowanie w jaki sposób powinnam to napisać

1

po pierwsze to się to chyba nie skompiluje w ogole

        ITelewizor tv = new TvLg();
        ITelewizor tv = new TvXiaomi();

a po drugie to serio takie coś sie nazywa wzorcem projektowym : D?

i co to oznacza:

 public void ZmienKanal(int kanal)
    {
    zmienKanal = new ZmienKanal();

    }

?

0
heyyou napisał(a):

i co to oznacza:

 public void ZmienKanal(int kanal)
    {
    zmienKanal = new ZmienKanal();

    }

?

To oznacza że konwencja nazywania metod jak klas (czyli wszystko od dużej litery) ssie niemiłosiernie. Mogli by chociaż rozróżniać MMojaMetoda, CMojaKlasa, IMojInterfejs :P

0
KamilAdam napisał(a):

To oznacza że konwencja nazywania metod jak klas (czyli wszystko od dużej litery) ssie niemiłosiernie.

Konwencja nazywania metod jak pól ssie jeszcze bardziej. :)
A problem nie polega na wielkości liter, tylko na nietrzymaniu się konwencji używania rzeczowników do nazywania klas, i wyrażeń czasownikowych do nazywania metod.

1
somekind napisał(a):
KamilAdam napisał(a):

To oznacza że konwencja nazywania metod jak klas (czyli wszystko od dużej litery) ssie niemiłosiernie.

Konwencja nazywania metod jak pól ssie jeszcze bardziej. :)

Dlatego najlepsze są języki programowania które w ogóle nie mają pól, jak np Haskell :P

0
heyyou napisał(a):

a po drugie to serio takie coś sie nazywa wzorcem projektowym : D?

Owszem, wzorce projektowe to są dość trywialne konstrukcje.

@Filo:

Tutaj powinno się przypisać argument tv to pola klasy tv:

    public PilotAbstrakcyjny(ITelewizor tv)
    {
    pilotAbstrakcyjny = new PilotAbstrakcyjny();
    }

W tych metodach powinno się wywoływać metody z pola klasy tv, a nie tworzyć instancje nieistniejących klas:

 public void Wlacz()
    {
    wlacz = new Wlacz();
    }

    public void Wylacz()
    {
      wylacz = new Wylacz();
    }
    public void ZmienKanal(int kanal)
    {
    zmienKanal = new ZmienKanal();

    }

Poza tym nie można mieć dwóch zmiennych o tej samej nazwie w jednym scope, do konstruktorów trzeba przekazywać argumenty, i nie potrzeba set we właściwości Kanal.

1 użytkowników online, w tym zalogowanych: 0, gości: 1