Programowanie obiektowe:

tematy zadania projektowego

Zadanie 1

Zdefiniować klasę abstrakcyjną Sekwencja do reprezentowania sekwencji liczb całkowitych oraz jej konkretne klasy pochodne Wektor i Lista. Klasa Sekwencja reprezentuje wspólne cechy sekwencji niezależne od szczegółów implementacji i powinna udostępniać m.in. funkcje wirtualne realizujące następujące operacje:

Klasa Wektor powinna implementować sekwencję jako wektor (tablicę) o zmiennej długości z pamięcią przydzielaną dynamicznie. Klasa Lista powinna reprezentować sekwencję jako listę jednokierunkową.

Dla każdej z klas zdefiniować konstruktory pozwalające na utworzenie sekwencji pustej, sekwencji o podanej początkowej długości i z podaną wartością początkową elementów, sekwencji zawierającej elementy danej tablicy liczb całkowitych oraz sekwencji będącej kopią innej sekwencji (dowolnego obiektu dowolnej klasy pochodnej klasy Sekwencja), a także odpowiednie destruktory zwalniające przydzieloną dla sekwencji pamięć. Ponadto zdefiniować operatory:

Operatory powinny jako argumenty przyjmować sekwencje będące obiektami dowolnej klasy pochodnej klasy Sekwencja.

Zadanie 2

Zdefiniować klasę abstrakcyjną Wielomian do reprezentowania wielomianów oraz jej konkretne klasy pochodne WielomianTablica i WielomianLista. Klasa Wielomian reprezentuje wspólne cechy wielomianu niezależne od szczegółowej implementacji i powinna udostępniać m.in. funkcje wirtualne realizujące następujące operacje:

Klasa WielomianTablica powinna reprezentować wielomian jako tablicę współczynników przy kolejnych potęgach zmiennej, określonych przez indeks tej tablicy. Pamięć dla niej należy przydzielać dynamicznie i zmieniać jej rozmiar w razie potrzeby. Klasa WielomianLista powinna reprezentować wielomian jako jednokierunkową listę przechowującą pary złożone z potęgi zmiennej i współczynnika przy tej potędze, przy czym każdej potędze może odpowiadać co najwyżej jeden element listy i nie mogą w niej występować żadne elementy ze współczynnikami równymi 0.

Dla każdej z klas zdefiniować konstruktory umożliwiające utworzenie wielomianu „pustego” (stale równego 0), wielomianu o podanym stopniu i współczynnikach podanych w tablicy oraz wielomianu będącego kopią innego wielomianu (dowolnego obiektu dowolnej klasy pochodnej klasy Wielomian), a także destruktory zwalniające przydzieloną pamięć. Ponadto zdefiniować operatory:

Operatory powinny jako argumenty przyjmować wielomiany będące obiektami dowolnej klasy pochodnej klasy Wielomian.

Zadanie 3

Zdefiniować klasę abstrakcyjną BuforEdycji do reprezentowania bufora tekstu w edytorze oraz jej konkretne klasy pochodne BuforWierszowy i BuforCiagly. Klasa BuforEdycji reprezentuje wspólne cechy bufora tekstu niezależne od szczegółowej implementacji i powinna zawierać składowe-zmienne reprezentujące aktualną pozycję (wiersz i kolumnę) w buforze oraz udostępniać m.in. funkcje wirtualne realizujące następujące operacje:

Klasa BuforWierszowy powinna reprezentować bufor tekstu jako tablicę wierszy, z dynamicznie przydzielaną pamięcią i możliwością zmiany liczby oraz długości wierszy. Każdy wiersz tekstu jest wówczas napisem (łańcuchem znakowym), na którego pierwszy znak wskazuje wskaźnik przechowywany w tablicy pod indeksem odpowiadającym numerowi wiersza. Klasa BuforCiagly powinna reprezentować bufor tekstu jako jeden „duży” ciągły napis (łańcuch znakowy), a podział na wiersze zaznaczają w nim znaki nowego wiersza. W tym przypadku pamięć powinna być przydzielana dynamicznie z zapasem i po jej zapełnieniu w razie potrzeby powiększana.

Dla każdej z klas zdefiniować konstruktory umożliwiające utworzenie bufora pozwalającego na przechowywanie tekstu liczącego co najmniej podaną liczbę wierszy i kolumn oraz bufora będącego kopią innego bufora (dowolnego obiektu dowolnej klasy pochodnej klasy BuforEdycji), a także destruktory zwalniające przydzieloną pamięć. Ponadto zdefiniować operatory:

Operatory powinny jako argumenty przyjmować bufory będące obiektami dowolnej klasy pochodnej klasy BuforEdycji.