Thursday, July 12, 2012

Java Практика - Занятие 5

На пятом занятии я решил остановиться на использовании коллекций, как альтернативу применению массивов для хранения наборов данных. Интерфейсы коллекций в Java обеспечивают весь необходимый инструментарий для работы с различными наборами данных, поэтому их употребление, во-первых, повышает скорость разработки программ, а во-вторых, улучшает качество кода за счет повторного использования уже написанного и отлаженного кода. Про коллекции я рассказывал на уроке 10 в курсе Java для тестировщиков. Так как применение коллекций упрощает разбираемый пример, я немного усложнил логику приложения, чтобы сделать ее более интересной. В дополнению к работе над разбираемой задачей в конце занятия было поставлено одна интересная задача для самостоятельной работы.

На этом занятии мы рассмотрели не все интерфейсы коллекций и возможные варианты их использования. Это еще предстоит в будущем. Пока что мы остановились только на интерфейсах Collection, List, Map. Также рассмотрели использование итератора для прохождения коллекции и возможного удаления элементов.

Домашнее задание для этого занятия:
  1. Добавить Map продуктов в класс Deal 
  2. Изменить методы getCost() и getSum(), чтобы они работали, используя Map продуктов. 
  3. Добавить Map свойств в Party вместо массивов keys и value. 
  4. Исправить методы ввода/вывода для работы с Map 
  5. Добавить возможность выбирать ранее введенный продукт при добавлении его в сделку.
Дополнительная задача для развития навыков программирования:
Написать программу, которая заполняет матрицу (двумерный массив) нулями и единицами так, чтобы получился рисунок песочных часов. Матрица обязательно квадратная. Размер матрицы пользователь вводит с консоли.
Например, для матрицы, размером 5х5, должен получиться такой рисунок:
1 1 1 1 1
0 1 1 1 0
0 0 1 0 0
0 1 1 1 0
1 1 1 1 1
Я также написал возможное решение этой задачи, если вдруг кому-то будет очень сложно. Скачать исходные файлы можно тут: JavaPractice05.zip (5,9 KB)

Чтобы откомпилировать и запустить этот пример, выполните следующие команды:
cd <каталог_куда_распаковали_архив>
cd src
javac *.java
java Program5 - это для запуска программы о сделках
java Program5Additional - это для запуска песочных часов 
Также, если Вы уже умеете работать со средой разработки Eclipse, то можете импортировать этот проект в нее и запустить. 


Ну и, собственно, видео занятия:

Read More...

Wednesday, July 4, 2012

Java Практика - Занятие 4

На четвертом занятии мы продолжили разбирать пример из предыдущего урока, немного усложнив его. Основное внимание в этот раз было уделено наследованию: класс Product мы сделали абстрактным и создали два его потомка. Также я показал, как можно использовать переопределение метода для уточнения логики в классе FotoProduct. Также немного поговорили об использовании констант в Java.

Домашним заданием к этому занятию будет сделать все то, о чем мы говорили, а именно:

  • Написать классы FotoProduct и BotinkiProduct
  • Написать методы для расчета скидки
  • Написать метод для расчета стоимости продукта с учетом скидки
  • Добавить поля в классы Product и Party
Также, заданием является сделать программу рабочей после вышеуказанных изменений, а именно:
  • Добавить ввод отдельных продуктов
  • Добавить ввод информации о Party
  • Добавить вывод информации о Party
В качестве дополнительного задания можно сделать следующее:
  • Добавить вывод полей отдельных продуктов
  • Усовершенствовать ввод и вывод, чтобы был более приятным для глаз :)
Обновление: Я в очередной раз написал возможное решение этой задачи. Скачать исходные файлы можно тут: JavaPractice04.zip (4,8 KB). Запуск программы описан в предыдущем посте.

 Ну и собственно видео:


Read More...

Sunday, July 1, 2012

Java Практика - Занятие 3

На третьем занятии мы уже подошли к объектам и проектированию. Я рассмотрел создание программы с позиции объектно-ориентированного дизайна. Бегло прошелся по теме третьего урока из курса Java для тестировщиков, чтобы вспомнить, что такое объект и как с ним работать. Далее мы решали задачу, немного похожую на реальный пример: выделяли объекты, рисовали диаграммы и реализовывали методы. 

На этом занятии я также впервые упомянул про одну из очень полезных книг, а именно книгу по шаблонам проектирования: Приемы объектно-ориентированного проектирования. Паттерны проектирования ("Банда четырёх": Эрих Гамма, Ричард Хелм, Ральф Джонсон, Джон Влиссидс). Я считаю, что каждый программист просто обязан изучить эту книгу и по возможности использовать шаблоны в своих программах. Конечно, это не легко будет делать сразу - понимание, где и какой шаблон лучше применять, приходит с опытом. Также, не расстраивайтесь, если Вы сразу не поймете эту книгу. Продолжайте изучать программирование и больше практикуйтесь писать программы - со временем Вы поймете, насколько мощный инструмент у Вас в руках. Однако, есть небольшое предостережение по поводу шаблонов проектирования: фокусируйтесь на простых решениях проблем, прежде чем сразу браться за применение сложных "рецептов" шаблонов. Так что не забывайте: Keep It Simple :)

Задачу, которую мы решали на занятии следующая:
Необходимо реализовать программу, которая будет позволять вводить сделки купли-продажи товаров между двумя участниками. В каждой сделке может быть несколько товаров, сумма сделки рассчитывается из суммы всех товаров. Сумма каждого товара рассчитывается из его стоимости и количества. Программа должна позволить ввести информацию о сделках, сохранить ее в памяти и вывести на экран. Ввод информацию осуществляется с экрана (консоли). Количество дополнительной информацию о сделке, участнике, товаре придумать самому (больше одного поля для класса). 
Форматы данных для хранения информации, которые я предложил, конечно же, не самые оптимальные. Например, использование массивов вместо коллекций, а также использование double для представления денег. Но это не главное для данного примера. Также, вводить информацию с консоли - это долго и нудно, но это тоже не главное. Я не хотел углубляться в способы представления определенной информации, в способы работы с файлами или базой данных - это все темы следующих занятий. Цель этого занятия - это научится выделять объекты, строить между ними связи и попрактиковаться программировать несложную логику. Поэтому ввод с консоли тут идеально подходит, ведь надо будет подумать, как последовательно все ввести, да еще чтобы это было красиво :)

На видео я вспоминаю про метод keyboard, который позволяет вводить данные с консоли, и который я обещал выслать слушателям. Итак, вот он: 
private String keyboard(String message) {
     System.out.print(message + ": ");
     Scanner scan = new Scanner(System.in);
     String rez = scan.next();
     scan.close();
     return rez;
}
Я также написал возможное решение этой задачи, если вдруг кому-то будет очень сложно. Скачать исходные файлы можно тут: JavaPractice03.zip (3,4 KB)
Чтобы откомпилировать и запустить этот пример, выполните следующие команды: 
cd <каталог_куда_распаковали_архив>
cd src 
javac *.java
java Program
Также, если Вы уже умеете работать со средой разработки Eclipse, то можете импортировать этот проект в нее и запустить. 

В качестве дополнительного задания, можно написать отдельные класс Keyboard, который будет содержать статические методы для ввода строки (String), целого числа (Integer) и дробного числа (Double). Методы по вводу чисел будет проверять, а число ли введено вообще, и выдавать сообщение об ошибке или требовать правильный ввод.

Ну и собственно видео:


Read More...