Problem z poleceniem w c#

0

Mam pewne zadanie do wykonania i nie rozumiem pewnej części jego treści.
"
Odwzorować w klasach osoby zatrudnione w firmie na różnych stanowiskach (pracownicy firmy):
sprzedawca, kasjer, magazynier, starszy magazynier (rozszerzenie magazyniera).
Każda zatrudniona osoba, rozpoczyna dzień pracy, kończy dzień pracy i wykonuje swoją pracę, która
jest inna w zależności od stanowiska.
Niektóre czynności nie są wykonywane przez osoby ponieważ służą do tego odpowiednie automaty,
które mogą tę pracę wykonać na przykład automat do wystawiania faktur (nie są pracownikami, ale
również wykonują pracę).
---Proszę opracować zestaw klas i interfejsów, tak aby można było umieścić w jednej kolekcji wszystkie
obiekty mogące wykonywać pracę tak aby można było iterując po kolekcji wywołać na ich poczet
metody wykonania swoich czynności.
"
Zrobiłem klasę pracownik oraz automat. Na ich podstawie zrobiłem obiekty tzn. potrzebnych pracowników oraz automat do faktur. Nie rozumiem do końca tego ostatniego zdania z polecenia i jeżeli ktoś by mógł mnie nakierować to byłbym wdzięczny. Oczywiście chodzi mi o przetłumaczenie to na bardziej zrozumiały język i ewentualnie wyznaczenie jakiejś ścieżki, którą powinienem pójść.
Tak, wiem, że to może śmieszne pytanie i dla innych banalne, dopiero się uczę i proszę o wyrozumiałość :D

Tutaj dodaje to co zrobiłem

namespace ConsoleApp11
{
    public class Pracownik
    {
        public string Imie { get; set; }
        public string Nazwisko { get; set; }
        public string Funkcja { get; set; }
        public int Godzinarozp { get; set; }
        public int Godzinazak { get; set; }
        public string Czynnosc { get; set; }

        public Pracownik (string imie, string nazwisko, string funkcja, int godzinarozp, int godzinazak, string czynnosc)
        {
            Imie = imie;
            Nazwisko = nazwisko;
            Funkcja = funkcja;
            Godzinarozp = godzinarozp;
            Godzinazak = godzinazak;
            Czynnosc = czynnosc;
        }
        
    
    }
    public class AutomatF
    {
        public string Czynnosc { get; set; }

        public AutomatF (string czynnosc)
        {
            Czynnosc = czynnosc;
        }

    }
}

namespace ConsoleApp11
{
    public class Program
    {
       

        static void Main(string[] args)
        {
            Pracownik Pra1 = new Pracownik("Mariusz", "Kusio", "Magazynier", 8, 16, "Pilnuje stanu magazynowego");
            Pracownik Pra2 = new Pracownik("Jakub", "Kowalczyk", "Kasjer", 8, 16, "Kasuje produkty");
            Pracownik Pra3 = new Pracownik("Renata", "Wisnia", "Sprzewdawca", 8, 16, "Prezentuje produkty i zacheca do ich zakupu");
            Pracownik Pra4 = new Pracownik("Marek", "Rynek", "Starszy magazynier", 8, 16, "Wspoldzieli obowiazki z magazynierem");

            AutomatF Aut1 = new AutomatF("Wystawiam faktury...");


            Console.WriteLine("Pracownik na stanowisku: {0}", Pra1.Funkcja );
            Console.WriteLine("Nazywa się: {0}", Pra1.Imie + " " + Pra1.Nazwisko);
            Console.WriteLine("Pracuje od godziny " + Pra1.Godzinarozp + " do godziny " + Pra1.Godzinazak);
        }
    }
}

1

Najproawdopodobniej chodzi o dziedziczenie klas. Np. tworzysz klasy PracownikMagazynier i PracownikKasjer dziedziczące po klasie Pracownik, potem tworzysz klasę PracownikStarszyMagazynier dziedziczącą po klasie PracownikMagazynier.

W każdej z klas dziedziczących zawierasz pola i metody charakterystyczne dla pracownika na danym stanowisku. Aby metoda w klasie pochodnej zastępowała metodę w klasie bazowej o tej samej nazwie, to metoda w klasie bazowej musi być ze słowem virtual.

A jeżeli każdy pracownik jest na jakimś stanowisku, to klasę Pracownik implementujesz jako abstrakcyjną lub jako interfejs, z którego nie można zrobić obiektu.

2

Proszę opracować zestaw klas i interfejsów,

słowa kluczowe class oraz interface

tak aby można było umieścić w jednej kolekcji

słowa kluczowe collections np List<T> gdzie T to jest stworzony przez Ciebie interfejs / klasa

wszystkie obiekty mogące wykonywać pracę tak aby można było iterując

slowa kluczowe foreach albo loop over collection

po kolekcji wywołać na ich poczet metody wykonania swoich czynności.

słowa kluczowe polymorphism oraz inheritance.

W skrócie chodzi o to bys zrobil na zasadzie


var workers = new List<IWorker> 
{
  new A(),
  new B(),
  new C(),
  new D()
};

foreach (var worker in workers) 
{
  worker.DoWork();
}
1

Pracownik i Automat u ciebie nie mają nic wspólnego, aby był "wspólny mianownik", np umieszczenie we wspólnej kolekcji

Pownny implementowac interface (nie ja wymyśliłem język polski w tym kodzie, tfu), poszerzam wypowiedź @fasadin

interface WykonującyPracę {
    void Wykonaj();
}
andrzejlisek napisał(a):

Najproawdopodobniej chodzi o dziedziczenie klas. Np. tworzysz klasy PracownikMagazynier i PracownikKasjer dziedziczące po klasie Pracownik, potem tworzysz klasę PracownikStarszyMagazynier dziedziczącą po klasie PracownikMagazynier.

Gdyby to nie było zadanie studenckie - to pewnie wiesz, że to chory pomysł.

To jest idealna sytuacja na kompozycję, a nie dziedziczenie.
Zarówno podczas analizy teoretycznej Pracownik MA stanowisko a nie JEST stanowiskiem, jak i zdroworozsądkowo: co z awansem na inne stanowisko, pracą na dwóch stanowiskach (ambitniejsze, poza tematem) itd, pani ma macierzyńskim itd ???

@Mariusz Kusio jeśli chcesz dalej pociągnąć, to minimalistyczna kompozycja to takie coś (celowo niedopracowana, tzreba popracować, m.in. przemyśleć interface):

public class Pracownik
    {
        public string Imie { get; set; }
        public string Nazwisko { get; set; }
        public Stanowisko Stanowsko { get; set; }
    } 
   public class Stanowsko : WykonującyPracę  {
        public string Funkcja { get; set; }
        public int Godzinarozp { get; set; }
        public int Godzinazak { get; set; }
        public string Czynnosc { get; set; }
 }

Jak kto chce, ze Stanowiska mozę sobie dziedziczyć StarszychMagazynierów

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