Brak cech obiektowości- jak to zmienić?

0

Witam serdecznie,
pracuję nad moim projektem zaliczeniowym z programowania obiektowego i mój pierwszy został odrzucony, gdyż "nie posiadał cech obiektowości". Prowadzący przyczepił się do:

class Item
{     public:
			char Name[255], Plot[999], Director[255];
			int Sounds, Time;
			double Price;
			Item *Next, *Prev;
};

class List
{
			Item *Start, *End;
      public:
             List(){Start=End=NULL;};
             ~List(){czysc();};
             //---Do destruktora czysci cala liste
             void czysc();
             //---Przeciazone dodawanie
             void Add( char *name, double price, char *director, int time);
             void Add( char *name, double price, int sound);
             void Add( char *name, double price, char *plot);
 . . . itd.

Stwierdził, że ot jest "obiektowo" bez sensu i zalecił mi:

  • podzielenie klasy Item na 3: Book, Movie i CD oraz nadrzędną Item.
  • Lista miałaby być agregatem.

Niestety: nie mam pojęcia jak ma wyglądać klasa List, jeżeli nowe klasy to:

 class Item
{
      public:
       char Name[255];
       double Price;
       Item *Next, *Prev;
};
class Book: public Item
{
      public:
      char Plot[999];
};
class CD: public Item
{
      public:
      int Sounds;
};
class Movie: public Item
{
      public:
      char *Director[255];
      int Time;
};

Bo do tej pory obiekty List to był wskaźniki na początek i koniec listy książek lub płyt, a teraz nie wiem jakie obiekty wywołać (wcześniej zaczynałem main od: "List Lista_Ksiazek, Lista_CD, Lista_Filmow")
z góry dziękuję za pomoc

0

W C++ nie da się sprawdzić typu dowolnego obiektu w runtime, prawda? (typeid działa w czasie kompilacji?)

W takim razie twój wykładowca ma IMO dziwne preferencje. Nie mam pojęcia co z punktu widzenia obiektowości ma zmienić zrobienie 'agregatów' z listy (i czy wykładowca i ja na pewno znamy taką samą definicję agregata).

Dziedziczenie OK, w końcu projekt jak rozumiem z OO. Nie podobają mi się jednak w klasie Item wskaźniki Next i Prev (czemu przedmiot ma takie pole jak next? Czy kiedy bierzesz płytę z półki sklepowej też ma taką własność jak 'next'?). Zrobiłbym z tego ListItem zawierający obiekt, wskaźnik prev i wskaźnik next.

Z listy nie tworzyłbym żadnego agregata tylko template'a - czyli miałbyś List<T> (np. List<Book> ksiazki) - to by było bardzo obiektowe.

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