Требования к проектам

Кратко: что требуется

  1. Ваша программа должна быть законченным продуктом: скачал, запустил, пользуюсь.
  2. Это не значит, что по количеству наворотов она должна быть наравне с Word'ом. Должен быть реализован тот минимальный уровень функциональности, при котором из программы можно непосредственно извлекать пользу.
  3. Должен иметься дистрибутив программы: скачал, распаковал, запустил - работает.
  4. Дистрибутив, исходники, "описание проекта" и модель классов предметной области должны быть выложены на github.
  5. В программе должен быть полиморфизм. Краткое описание того, где именно он там находится - поместите в README.md (специальный файл в репозитории на github'е).

Как к этому прийти

  1. Сформулируйте для себя видение той минимальной версии своей программы, запустив которую можно непосредственно получать от нее пользу. Запишите результат на бумаге.
  2. Реализуйте эту функциональность в программе. Неважно как. Главное - чтоб работало. Советую начать с самой главной функции (геймплей/просмотр каталога/прохождение теста etc.) и постепенно добавлять другие группы функциональности (загрузка уровней с диска / постепенное повышение сложности игры / загрузка и сохранение каталога или теста etc.) - и так далее шаг за шагом.
  3. Остановитесь. Оглянитесь. Посмотрите на то, как устроена программа, которая у Вас получилась. Подумайте, как эту программу можно сделать более структурированной.
  4. Если в программе нигде не используется полиморфизм - самое время применить его для улучшения структуры получившегося кода. Если и на этом этапе полиморфизм не появится - следует задуматься о небольшом расширении функциональности. Можно проконсультироваться с преподавателем.
  5. Проверьте, дейтвительно ли у Вас получился законченный продукт:
    1. Того, что в нем реализвано, достаточно для того, чтобы программа была (минимально) полезной для пользователя.
    2. Следов того, что не реализовано, в программе вообще нет (с точки зрения пользователя, разумеется).
  6. Подготовьте дистрибутив: сделайтие "Release" exe-шку, добавьте к ней другие необходимые файлы. Все это заархивируйте zip-ом. По желаниию можно подготовить дистрибутивы для различных платформ: Windows/Linux, x86/x86_64.  В имя файла имеет смысл включить номер версии. Проверьте, что программа запускается на компьютере у Вашей бабушки.
  7. Зарегистрируйтесь на GitHub. В настройках профиля укажите све имя и фамилию на русском языке (чтобы Вас можно было идентифицировать). Скачайте их десктопный клиент GitHub. Создайте репозиторий и залейте на него исходники. Описание проекта и объектную модель предметной области разместите в виде отдельных wiki-страниц (доступно из веб-интерфейса GitHub). Не нужно заливать их в виде .doc-файлов!
  8. В файле README.md опишите, где и как у вас используется полиморфизм. Здесь же стоит разместить краткое и полезное описание своей программы. Помните: этот файл - лицо Вашего проекта!
  9. Нажав ссылку "releases" на главной странице Вашего репозитория, создайте релиз и залейте на сервер подготовленный ранее .zip-архив(ы).
  10. В разделе "Issues" создайте новый пустой элемент с названием "Комментарии". Поместите ссылку на него на главную страницу (файл README.md).
  11. Проверьте, что все работает: в профиле есть Ваша фамилия, исходники доступны, дистрибутив скачивается и запускается, на wiki присутствует описание проекта и модель предметной области, на главной странице понятно написано про проект и полиморфизм в нем, работает ссылка для добавления коммнтариев.
  12. Вышлите мне на почту ссылку на свой репозиторий на GitHub.

Ссылки

  1. Как собирать проект "для бабушки": http://0xc0dec.org/2011/02/06/vs-runtime-static/ (не забываем также включать конфигурацию Release).
  2. Пример репозитория на GitHub "как надо" (пока без дистрибутива:)). На английском, как в примере, писать не обязательно.
  3. Мои рекомендации по освоению GitHub'а.

Требования к конкретным типам проектов

Далее дается более подробная расшифровка, что следует понимать под "минимальным уровенем функциональности, при котором из программы можно непосредственно извлекать пользу".
Иногда с небольшими утяжедениями - чтобы выровнять сложность различных типов проектов.

Игры
  • Имеется "развитие событий": начал играть, набрал некоторое количество очков, перешел на 2-ой уровень (сложности), затем на 3-ий...и т.д...прошел игру целиком! "Ваш счет такой-то..."
    • Если игра предусматривает "карты уровней", не надо рисовать их 10 штук. Нарисуйте два. Разумеется, игра должна загружать карты уровней из внешних файлов (что будет позволять добавить их еще сколько угодно).
  • Чтобы игрок имел возможность сделать перерыв на обед/сон/университет должно поддерживаться сохранение и загрузка игры на диск. При наличии времени - пауза.
    • Если у вас игра с подгружаемыми с диска "картами уровней", это требование не обязательное - у вас и так есть чем заняться.
Каталоги товаров и другого
Просто список каких-то объектов, которые можно просматривать/добавлять/редактировать/удалять - не годится.
Либо у вас должно быть неколько качественно различных типов товара (хороший пример полиморфизма), либо товар должен быть разделен на категории с возможностью просмотра списка категорий, добавления и удаления их, переноса товара из категории в категорию.
Естественно, все товары должны храниться в файлах на диске (или БД).
Обязательно должен присутсвовать разумный поиск.
Интересно было бы увидеть экспорт результатов поиска в отдельную "базу".
Обмен данными с Excel тоже приветствуется.

Тесты
Должна быть возможность выбрать один из нескольких тестов, пройти его и посмотреть свои результаты (оценку/рекомендации).
Тесты должны предусматривать несколько различных типов вопросов.
Пользователь должен иметь возможность добавлять новые тесты, редактируя лишь внешние файлы и не имея доступа к исходникам программы.

Чаты
Ваш продукт дожен быть пригоден к использованию. Установите еге в общежитии и несколько дней им пользуйтесь. Если получается (и удобно!) - отлично!

Карта с расположением поездов
Должна иметься возможность загрузить в программу реальное расписание поездов (хотя бы через ручное редактирование внешних файлов) и реальную карту их маршрутов. После чего - реально увидеть, какой поезд где сейчас находится.

Музыкальный проигрыватель
Должен быть плейлист, возможность его редактирования, сохранения/загрузки с диска.

Калькулятор
Длинная арифметика для дробных чисел. Как вариант - вычисление в простых дробях (т.е. 1/3*3=1, а не 0.9999999).
Ввод данных посредством разбора арифметического выражения (обратная польская запись).
Можно предусмотреть построение графиков.

Телефонный справочник
В принципе, требвания те же, что и для "каталогов товаров". Но поскольку тут неуместны категории, нужно их чем-то заменить.
Например.
У каждого абонента может быть несколько телефонных номеров. Еще у него может быть адрес.
Поиск за логарифмическое время по фамилии, номеру телефона или адресу. Возможность поиска по "усеченной" фамилии: например, по запросу "петров" будет найдена как "Петрова", так и "Петровский".

Замечание. Не следует воспринимать приведенные выше требования как жесткие ограничения. Оценивайте по ним приблизительные требования к сложности Вашего проекта. Если у Вас нет чего-то, что фигурирует в списке выше, но есть вместо него что-то свое - отлично! Но программа обязательно должна быть пригодна к использованию и содержать классы с полиморфным поведением.

Оценивание

 ФичаБаллы
Документ "Описание проекта", README.md и ссылка "Комментировать" в нем (см.п.10 выше).
 3
Документ "Модель классов предметной области".
 2
Есть дистрибутив и исходники, дистрибутив запускается и демонстрирует хоть какую-то функциональность.
 2
Есть классы с полиморфным поведением и они используются. Это описано в README.md.3 балла или до -5 если это не так
Используется GUI или графический движок.до -5 если это не так
Везде где, где уместно использование STL, STL используется.
до -3 если это не так
Все классно
20 баллов

Примечание: если коротко, то за консольку с полиморфизмом можно получить до 10 баллов; за программу, которой реально можно пользоваться - до 20 за вычетом всяческих "если это не так".
За несвоевременную сдачу - штраф.

Comments