Разработване на приложения с Java

Теми на курсовите проекти
версия 0.6

 

Общи изисквания:

·         Всички проекти се оценяват еднакво (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 може да не приема никакви аргументи). Все пак трябва да е възможно да се извършват поддържаните от файловата система операции с тях.

Изключително важно е да спазвате дефинираните в началото на документа изисквания!