Эту программу я оттачивал на нескольких группах - это ее 5 редакция. Спешу поделиться с теми, кто хочет запускать java тренинг у себя но не знает с чего начать. После java basic хорошо бы углубляться в enterprise мир и набивать шишки с тем же приложением но подключая к нему все более сложные технологии, выводя его в Web.
Сейчас я работаю с напарником над программой goJava в goIT, если интересует хороший тренинг с менторами и тренерами и группой единомышленников - велкам к нам.
- Установим окружение, необходимое для программирование на java. Напишем 4 несложных консольных приложения. Ознакомимся с языковыми конструкциями, используемыми на java. Ознакомимся со средствами для командной работы с кодом (SVN). Получим обратную связь от ментора в виде code review замечаний.
- Смоделируем любую выбранную Трейни систему (по-умолчанию это университет) в терминах объектно-ориентированного программирования. Практически овладеем основными понятиями OOP: инкапсуляция, наследование, полиморфизм, интерфейс, агрегация, композиция, абстрактный класс, метод, поле и многие другие. Модель будет представлена в виде UML диаграммы для демонстрации ее коллегам и ментору. Много code review. Много новых терминов. Будем ломать привычки процедурного стиля программирования. Все это позволит научиться думать объектами и абстрагироваться от деталей. Задание будет сформулировано в виде нескольких user stories, отвечающих на вопрос - что я как пользователь будущей системы смогу сделать.
- Т.к. модель уже готова, то стоит зафиксировать ее в том рабочем состоянии, в котором она находится. Мы научимся дополнять рабочий код таким образом, чтобы он стал самотестирующимся. В этом нам поможет библиотека jUnit. Что такое тест? Как сделать так, чтобы одним кликом можно было сказать, система работает или нет? Как справляться со стрессом в процессе разработки? Все это мы разберем в этом модуле.
- Если в прошлом модуле мы использовали массивы для агрегации множества однотипных объектов, то теперь мы познакомимся с разными способами хранения информации - Collection, List, Set, Map,... Тесты, написанные в прошлом модуле позволят нам не бояться, что что-то будет поломано - конечный пользователь не заметит перемен. Это называется рефакторинг! Безопасный рефакторинг имеет свои правила. Научимся и этому. Код модели станет чище, более ООП.
- Немного отвлечемся от нашей модели и углубимся в качественно новый процесс разработки TDD. Если мы раньше писали тест после того как была написана функциональность, то сейчас мы будем писать требование в виде теста до того, как эта функциональность появится. Это перевернет все с ног на голову. Кто-то называет этот способ разработки - программирование для домохозяек - так он упрощает будни программиста. Но на самом деле все не так просто, требуется немало сил, чтобы сломать старые привычки. Это мы и начнем делать. Бинарное сортированное дерево будет нашим подопытным кроликом - в процессе его разработки мы испытаем процесс TDD на себе.
- После того, как дерево будет реализовано, мы разберем по косточкам наши тесты (функциональные) и выделим ряд их недостатков, а так же рассмотрим альтернативу - тесты модульные. Сделаем ряд превращений нашего дерева так, чтобы было возможным unit тестирование и воспользуемся Mockito фреймворком для написания настоящих! unit тестов. Теперь мы можем вернуться к нашей модели с багажом новых инструментов. В дальнейшем вся твоя разработка будет происходить через TDD с написанием unit тестов.
- Если раньше модель работала в режиме приема идеальных данных, то теперь мы изрядно постараемся и будем передавать на всех все, что только можно передать. Конечно, модель будет вести себя не предсказуемо, а потому мы воспользуемся мощным инструментом, который присутствует в Java наряду с OOP - Exception Handling. Поймем, что такое checked/unchecked exception, что такое error, как обрабатывать исключения (и надо ли вообще) и многое другое. Как это отразится на модели? А ней будет реализована защита от дурака.
- Чтобы наша моделька была полезной - она должна уметь сохранять свое состояние. В качестве альтернативы базе данных мы будем использовать плоские файлы. Как проводить чтение, как проводить запись, множество разных классов для для всевозможных способов чтения/записи - запутаться можно. Но тем не менее мы научимся выбирать именно те классы, которые нам нужны.
А что бы ты хотел добавить в этот план?
Что еще надо знать новичку, изучающем у java?
ПриЁм
Сайт GoIT немного криво смотрится при небольшом размере окна браузера: http://img.leprosorium.com/2382859
ОтветитьУдалить#bugreport
Спасибо, передал ответственному. Сайт будет переделываться и там исправят...
УдалитьСаша, интересная программа.
ОтветитьУдалитьА как выбирал мок-фреймворк для этой программы? Почему EasyMock, ведь например Mockito даёт более простой код без всяких там replay?
Копипаст. Мокито, все на мокито. Ща исправлю..
УдалитьУРА !!! :)
Удалить