·
Всички проекти се оценяват еднакво
(40 точки) и са по избор. Всеки студент избира някои от предложените проекти.
·
Всяка задача трябва да бъде
реализирана на Java и да се компилира със SUN JDK 1.4.2 (при смислена
необходимост от изпозлване на друго JDK – обърнете са към
преподавателите!).
·
Всяка задача се състои от две
части – библиотечна и клиентска част. Към библиотечната част е засдължително да
се приложат документациите изискани по-долу. За клиентската такова изискване
няма, нейната цел е да демонстрира употребата на библиотеката.
·
Маркираните със * (звездичка) изисквания
не са задължителни, но изпълнението им може да донесе допълнителни точки (в
случай че останалата част от проекта не получи пълен брой точки).
·
Библиотеката трябва да е добре
проектирана, да бъде лесно разширяването на функционалността, промяната на
имплементациите и представянето.
·
Кодът и трябва да е изчистен и
подреден, да се използва подходяща naming конвенция и да има точни и
ясни коментари.
·
Трябва да се спазват препоръките
от лекции.
·
Трябва да има адекватна обработка
на грешки.
·
Трябва да има защитен код (assert-и, проверки за
валидност на представянето).
·
*Тестващ код (unit testing) – не е задължително.
·
Библиотеката трябва да работи коректно.
·
Трябва да приложите диаграми
описващи обектният модел, module dependency diagram, спецификации
(интерфейси, preconditions, postconditions и т.н.) според нотациите от лекциите.
·
Няма конкретни изисквания към
графичните инструменти, с които ще направите диаграмите. Използвайте някои
широко разпространен формат.
·
Клиентската част е необходимо да
демонстрира използването на цялата функционалност на библиотеката.
·
Не необходимо да се прави
документация и спецификация на клиентската част, но е препоръчително кодът все
пак да бъде четлив.
·
Дизайн, спецификация и
документация на библиотечната част.
·
Коректност, пълнота и добра
реализация на библиотечната част.
·
Коректност, пълнота и добра
реализация на клиентската част.
През формата на сайта се предава архивен файл (на някой от популярните компресиращи програми), който съдържа:
· Сорс кода на вашата програма – на библиотечната и клиентската част.
· Скрипт който да компилира и стартира клиентската част.
· Диаграми документации и други изискани по-горе.
Проект 1. Virtual File System.
Библиотечна част:
Да се създаде библиотека поддържаща дърво от директории и файлове в паметта. Тя трябва да има следните функционалностти:
· При създаване да бъде празна.
· Да могат да се създават файлове и директории.
· Да могат да се изтриват файлове и директории.
· Да могат да се преименуват файлове и директории.
· Да могат да се отварят от файловете стандартните за JDK потоци за четене и писане.
· *Да може цяла виртуална файлова система да се записва или зарежда от файл от истинската файлова система.
· Case sensitivity на тази виртуална файлова система е по избор на студента.
Клиентска част:
Да се създаде клиентска програма с текстов интерфейс наподобяващ прост команден интерпретатор използваща написаната библиотека поддържаща следните команди:
· ls или dir (по избор) – показва елементите на текущата директория.
· cd – променя текущата директория на подадената като аргумент.
· cat или type (по избор) – показва данните в подадения като аргумент файл.
· mv или ren (по избор) – променя името на файл или директория.
· import – зарежда файл от истинската файлова система във виртуалната.
· export – запазва файл от виртуалната файлова система в истинската.
· *save – запазва цялата виртуална файлова система във файл от истинската.
· *load – зарежда цяла виртуална система от файл от истинската.
· * други подходящи.
Командите могат да имат аналогичен формат на тези от командните интерпретатори на windows и linux, като е необходимо да поддържат само най-необходимото (например dir може да не приема никакви аргументи). Все пак трябва да е възможно да се извършват поддържаните от файловата система операции с тях.
Изключително важно е да спазвате дефинираните в началото на документа изисквания!
Проект 2. Expression Calculator.
Библиотечна част:
Да се създаде библиотека за дървета на аритметични изрази, поддържаща следните функционалности:
· Да поддържа събиране (‘+’), изваждане (‘-‘), умножение (‘*’), деление (‘/’), унарен плюс (‘+’), унарен минус (‘-’), скоби (‘(’, ‘)’) и числови константи с двойна точност (double типът).
· Да може да се създават прости изрази (от константи).
· Да може да се създават изрази по операция и аргументите и (също изрази).
· Изразите да бъдат immutable.
· Да могат да се оценяват изрази (т.е. да им се намира стойността).
· Да се поддържа създаване на израз от низ, в който той е написан (parse-ване).
· * Да се добавят и други операции – наприемр степенуване.
· * Да се добави поддръжка на функции в израза (например log, sin, cos) и константи (например pi, e…)
· * Да се добави възможност за лесно добавяне на функции и операции от клиента.
Клиентска част:
Да се създаде клиентска програма с текстов интерфейс която демонстрира използването на библиотеката и накрая дава възможност на потребителя да въведе израз който да бъде пресметнат.
Изключително важно е да спазвате дефинираните в началото на документа изисквания!
Проект 3. Tree.
Библиотечна част:
Да се създаде библиотека за представяне на йерархични структури или дървета поддържаща следните функционалности:
· Да може да съхранява обекти от всякакъв тип във всеки връх.
· Всеки връх да има неограничен брой наследници които са наредени.
· Листата (или крайните елементи) да бъдат също йерархии които да имат нула наследници.
· Да се поддържат итератори обхождащи иерархиите в дълбочина и ширина.
· Да има mutable и immutable версия на йерархиите (дърветата).
· Mutable версията да поддържа добавяне на наследник по даден индекс и обект.
· Immutable версията трябва да поддържа създаване на йерархия по корен и подйерархии.
· * Да се добави поддръжка на повече от едно представяния (например ляв син, десен брат; списък на ребрата; ...)
· * Да се добавят итератори правещи други обхождания.
Клиентска част:
Да се създаде клиентска програма с текстов интерфейс която демонстрира използването на библиотеката като извежда рекурсивно дървета по подходящ начин (например с табулация по-нивото).
Изключително важно е да спазвате дефинираните в началото на документа изисквания!
Проект 4. The Matrix Reloaded.
Библиотечна част:
Да се създаде библиотека за матрици поддържаща следните функционалности:
· Да може да се създава по даден двумерен масив от числа.
· Да поддържа събиране и умножение на матрици.
· Да се поддържа итератор който обхожда матрицита по редове.
· Да се поддържат mutable и immutable матрици.
· Да се поддържа промяна на поле (при immutable матрици връщащо нова матрица).
· Да могат да се досътпват атрибутите на матриците (размер, стойности в клетки).
· Да се поддържат две представяния – чрез двумерен масив и чрез Map.
· Да има FactoryMethod-и които автоматично по дадената матрица определят кое представяне ще е по-подходящо.
· От Immutable матриците да могат да се вземат под-матрици, като се заема само константна допълнителна памет.
· * Да се добави поддръжка на други представяния.
· * Да се добавят итератори правещи други обхождания.
· * Да се добавят други операции за матрици (от линейната алгебра).
Клиентска част:
Да се създаде клиентска програма с текстов интерфейс, която демонстрира използването на библиотеката като извежда получените матрици по подходящ начин.
Изключително важно е да спазвате дефинираните в началото на документа изисквания!
Проект 5. Virtual Catalogue System.
Библиотечна част:
Да се създаде библиотека за каталог на долументи поддържаща дърво от категории и дкументи в паметта. Тя трябва да има следните функционалностти:
· При създаване дървото да бъде празно.
· Да могат да се създават нови категории и да се добавят документи към съществуваща категория.
· Да могат да се изтриват категории и документи.
· Да могат да се преместват документи от една категория в друга.
· *Да може цялата виртуална библиотека да се записва или зарежда от файл на файловата система.
Клиентска част:
Да се създаде клиентска програма с текстов интерфейс наподобяващ прост команден интерпретатор използваща написаната библиотека и поддържаща следните команди:
· listdocs – показва елементите на текущата категория.
· listsorted - показва елементите на текущата категория сортирани по общ признак (да се избере подходящ признак по който да се извършва сортирането).
· opencat – променя текущата категория на подадената като аргумент.
· printdoc – показва данните в подадения като аргумент документ.
· changecat – премества документ от една категория в друга.
· *save – запазва цялият виртуален каталог във файл от истинската.
· *load – зарежда цялият виртуален каталог от файл от истинската.
· * други подходящи.
Командите могат да имат аналогичен формат на тези от командните интерпретатори на windows и linux, като е необходимо да поддържат само най-необходимото (например dir може да не приема никакви аргументи). Все пак трябва да е възможно да се извършват поддържаните от файловата система операции с тях.
Изключително важно е да спазвате дефинираните в началото на документа изисквания!
Проект 6. Virtual Geometrical Objects Database System.
Библиотечна част:
Да се създаде библиотека за каталог на геометрични обекти поддържащ дърво от категории и геометрични обекти в паметта. Тя трябва да има следните функционалностти:
· При създаване дървото да бъде празно.
· Да могат да се създават нови категории и да се добавят геометрични обекти към съществуваща категория.
· Да могат да се изтриват категории и обекти.
· Да могат да се преместват обекти от една категория в друга.
· *Да може цялата база от обекти да се записва или зарежда от файл на файловата система.
Клиентска част:
Да се създаде клиентска програма с текстов интерфейс наподобяващ прост команден интерпретатор използваща написаната библиотека и поддържаща следните команди:
· listobjects – показва елементите на текущата категория.
· listsorted - показва елементите на текущата категория сортирани по общ признак (да се избере подходящ признак по който да се извършва сортирането – пр. обиколка, лице).
· opencat – променя текущата категория на подадената като аргумент.
· printobjectinfo – показва данните в подадения като аргумент идентификатор на обект.
· changecat – премества обект от една категория в друга.
· *save – запазва цялият виртуален каталог във файл от истинската.
· *load – зарежда цялият виртуален каталог от файл от истинската.
· * други подходящи.
Командите могат да имат аналогичен формат на тези от командните интерпретатори на windows и linux, като е необходимо да поддържат само най-необходимото (например dir може да не приема никакви аргументи). Все пак трябва да е възможно да се извършват поддържаните от файловата система операции с тях.
Изключително важно е да спазвате дефинираните в началото на документа изисквания!