# Klasy abstrakcyjne class TextLines: getNumberOfLines() readLine(numer wiersza) -> wiersz o zadanym numerze writeLine(line) -> dodanie wiersza na końcu writeLine(numer wiersza, line) -> dodanie wiersza w konkretnej pozycji -> nie pozwalamy na dodanie wiersza "z przewą": jak mamy 1, 2, 3 to nie można dodać 7. -> gdy wiersz istnieje to zostaje nadpisany deleteLine(numer wiersza) class IdentifiedTextLines: TextLines (identyfikatory nie muszą być unikalne; pełnią bardziej rolę tagów, etykiet) readLine(indentyfikator) -> wiersz(e) posiadające zadaną identyfikator writeLine(indentyfikator, line) -> dodanie wiersza na końcu writeLine(numer wiersza, indentyfikator, line) -> dodanie wiersza w konkretnej pozycji deleteLine(indentyfikator) class UniquelyIdentifiedTextLines: TextLines class UniquelyIdentifiedTextLines: IdentifiedTextLines class UniquelyIdentifiedTextLines container: IdentifiedTextLines # Klasy "realne" class TextLinesInMemory: TextLines class TextLinesInFile: TextLines class TextLinesInDB: TextLines class IdentifiedTextLinesInMemory: IdentifiedTextLines ... class UniquelyIdentifiedTextLinesInMemory: UniquelyIdentifiedTextLines ...