Showing posts with label итоги. Show all posts
Showing posts with label итоги. Show all posts

12 July, 2014

Занятие 12

На двенадцатом занятии изучили механизм обработки исключений
Рассмотрели иерархию классов исключений (Throwable, Error, Exception, RuntimeException), классификацию (checked-unchecked), способы декларирования исключений в методах (throws), генерацию исключений (throw) и их обработку (try-catch-finally).
К сожалению не успели рассмотреть создание собственных классов исключений
К прочтению рекомендуется глава 11 у Хорстманна, или официальный туториал - http://docs.oracle.com/javase/tutorial/essential/exceptions/

Домашка

В ранее реализованных заданиях - "Ханойская башня" и "список-массив/связный список" добавить обработку ошибок при помощи искючений.
Т.к. создание собственных классов исключений еще не рассмотрели, то допускается использование исключений из библиотеки Java SE
Но я все же рекомендую использовать собственные классы исключений.

Самостоятельное изучение

У Хорстманна в главе 11 также рассмотрены диагностические утверждения (assertion), протоколирование при помощи класса java.util.logging.Logger, и приемы отладки приложений
Эти темы мы проходить не будем, я рекомендую изучить их самостоятельно.

08 July, 2014

Занятия 10-11

На 10 и 11 занятиях рассмотрели
  • Enum (перечисления)
  • Методы с переменным числом параметров
  • Шаблон проектирования Listener (слушатель), также называемый Callback. Рассмотрели пример реализации слушателя из книги Хорстманна.
  • Вложенные классы. Статические вложенные классы, доступ к приватным полям внешнего класса из вложенных классов.
К прочтению рекомендуются главы 5 и 6 Хорстманна.
Для самостоятельного изучения оставили рефлексию (описана в главе 5) и программирование графики при помощи пакета Swing (главы 7-8)
К рефлексии мы возможно вернемся, если будет время.

01 July, 2014

Итоги занятий 6-9

Пройденный материал

Наследование. Суперклассы, подклассы.
Последовательность инициализации классов с учетом конструкторов суперклассов.
Динамическое связывание.
Приведение типов
Абстрактные классы
Глобальный суперкласс Object. Методы equals(), hashCode(), toString()
Интерфейсы
Обобщенные списки-массивы. Интерфейс List, класс ArrayList
Классы оболочки - Integer, Double, Boolean и.т.д.

Домашние задания

1. Выбрать предметную область которая вам хорошо знакома. Выделить несколько классов (3-5, больше не нужно) для построения иерархии суперклассов и подклассов. Определить в классах поля, 5-7, не более. Определить конструкторы.

2. На занятии рассмотрели интерфейс MyComparable, в котором описан метод compareTo(). Метод принимает на вход объект для сравнения.
При вызове  obj1.compareTo(obj2) должен вернуть '-1' если obj1 меньше obj2, '1' - если больше, '0' если объекты эквивалентны.
В одном из своих классов реализовать интерфейс MyComparable, в метод compareTo() включить логику сравнения объектов этого класса. Можно сравнивать по конкретному полю, или по нескольким сразу - на ваше усмотрение.
Реализовать метод для сортировки объектов этого класса с использованием интерфейса MyComparable. Метод сортировки должен принимать на вход массив объектов соответствующих спецификации MyComparable.

Прошу не путать этот интерфейс с java.lang.Comparable, который используется в стандартных сортировщиках.

3. Описать интерфейс SimpleList. Создать собственную реализацию массива-списка SimpleArrayList, соответствующую спецификации SimpleList. SimpleArrayList должен хранить данные внутри в виде примитивного массива, но при этом обеспечивать расширяемость списка. Для SimpleArrayList предусмотреть два конструктора, конструктор по умолчанию должен создавать внутренний массив стандартного размера, например 10, конструктор с параметром должен создавать внутренний массив с размером, который указал пользователь.

По желанию создать реализацию связного списка, SimpleLinkedList, также соответствующую спецификации SimpleList. Достаточно реализовать односвязный список.



Методы интерфейса SimpleList:
add(Object) - добавляет объект в конец списка
add(int, Object) - добавляет новый элемент по указанному индексу. При этом не затирая существующий элемент по этому индексу, а сдвигая его и все последующие вправо.
remove(int) - удаляет элемент, находящийся по указанному индексу. При этом все последующие элементы должны сдвигаться влево.
size() - возвращает количество элементов в списке (не путать с размером внутреннего массива)
get(int) - возвращает элемент, находящийся по указанному индексу.
set(int, Object) - заменяет элемент, находящийся по указанному индексу, на переданный объект.
equals(Object) - проверка эквивалентности, сравнивает поэлементно два списка.

Созданный массив должен уметь хранить объекты одного из созданных вами классов. В описанных мной методах Object замените на свой класс.
Все методы доступа и модифицирующие методы должны проверять корректность переданных данных. В случае ошибки, пока используем System.exit(). В дальнейшем научимся использовать исключения.

Требования к домашке

Отныне вводится новое требование к выполняемым заданиям - все классы должны быть описаны в пакетах. Имена пакетов на ваше усмотрение, но желательно придерживаться общих конвенций. Пакеты проходили на 5-м занятии.

17 June, 2014

Итоги 4 и 5 занятий

На четвертом и пятом занятиях рассмотрены основные принципы ООП.
Детально прошлись по инкапсуляции
Кратко рассмотрели пакеты и путь поиска классов (classpath).

К прочтению рекомендуется вся 4-я глава Хорстманна
В конце этой главы приводится подробная информация по пакетам, classpath, и встроенной возможности документирования - эта часть рекомендуется к самостоятельному изучению.

В качестве примера рассмотрели задачу о Ханойской башне

Для решения задачи логика программы разделена на два модуля - игрок и игра.
Вначале игрок создает новый экземпляр игры с указанием количества дисков в башне.
Игра предоставляет игроку возможность переместить диск с одного стержня на другой - метод move(), в аргументы которого передается имя диска-источника, и имя диска назначения.
Игрок, выполняя последовательные вызовы метода move(), перемещает башню с водного стержня на другой.

На занятии рассмотрели реализацию игры - класс Tower

Домашнее задание

Расширить логику класса Tower. Реализовать проверку правил игры - больший диск нельзя класть на меньший, с пустого стержня нельзя пытаться снять диск.
При попытке пользователя выполнить неправильное действие, нужно вывести на экран сообщение об ошибке.

Так как для реализации этой логики потребуется производить множество одинаковых проверок для каждого стержня, то следует всю логику, относящуюся к стержню, вынести в отдельный класс - Rod.
Стержень предоставляет для игры возможность поместить на стержень диск, и снять диск со стержня. Соответственно - метод putDisc, в аргумент метода передается размер диска, и takeOffDisc - не принимает аргументов, возвращает размер снятого диска.
При инициализации, игра создает три экземпляра класса Rod, и один из них наполняет дисками.
При вызове игроком метода move, игра должна снять диск с одного стержня и поместить его на другой.

Диаграмма классов:

Как вариант - реализовать в методах putDisc и takeOffDisc возврат кода ошибки, в случае неудачного помещения или снятия диска.

Реализовать логику игрока - запросить у пользователя высоту башни, и вывести трассировку решения задачи для указанной высоты.

09 June, 2014

Итоги первых трех занятий

Темы, рассмотренные на первых трех занятиях


Установка JDK и IntelliJ IDEA
Примитивные типы данных
Операции
Массивы
Блоки операций
Условные операторы if...else, if...else...if, switch
Циклы while, do...while, for, foreach
Ввод-вывод

Рекомендуется к прочтению 1-3 главы Хорстманна.
Все дальнейшие отсылки на Хорстманна будут относиться к 9-му изданию 2014 года.


Домашка

  1. Генератор простых чисел.

    Программа запрашивает у пользователя верхний предел, после ввода, программа должна вывести на экран все простые числа в диапазоне от 0 до верхнего предела.

    Необходимо обрабатывать ввод некорректных данных, и запрашивать у пользователя корректные.
  2. Детектор палиндромов.

    Программа запрашивает у пользователя слово или выражение. Если введенное слово или выражение является палиндромом, то программа выводит "это палиндром", в противном случае "это не палиндром"

    После проверки палиндрома программа должна запрашивать от пользователя новый палиндром, и так пока пользователь не введет exit.
  3. Текстовый фильтр.

    Программа принимает на вход слово-фильтр, и путь к текстовому файлу, который требуется отфильтровать. (Входные данные можно передавать как параметры командной строки, описано у Хорстманна на стр. 120, или запрашивать у пользователя в интерактивном режиме через сканнер)
    Программа построчно читает файл, проверяет есть ли в строке слово-фольтр, если есть - программа выводит строку на экран, иначе программа переходит к следующей строке.
  4. Сортировка текстового файла

    Программа принимает на вход путь к файлу содержимое которого нужно отсортировать. (как параметр командной строки, или через сканнер)

    Программа сравнивает все прочитанные из файла строки и выводит их на экран в отсортированном в алфавитном порядке виде.

    Следует использовать небольшие файлы, на несколько десятков строк.
  5. Калькулятор

    Программа запрашивает у пользователя простое математическое выражение, вычисляет выражение, выводит результат.

    По желанию реализовать один из вариантов.

    Попроще - программа запрашивает по очереди первый операнд, второй операнд и операцию.

    Посложнее - выражение с двумя операндами вводится одной строкой в традиционном виде, например 2 + 2 (операторы и операнд отделяются пробелом).

    Следует обрабатывать ввод нечисловых значений, и запрашивать повторный ввод.
Для некоторых заданий протребуются функции работы со строками, сравнение, проверка вхождения подстроки и т.п. Об этом нужно почитать у Хорстманна на стр. 77-83

Возникшие вопросы присылайте на мою почту или оставляйте здесь в комментариях

UPD.
Инициализация Scanner для чтения файла, и PrintStream для записи в файл может быть еще проще:
Scanner fileIn = new Scanner(new File("c:\\filein.txt"));
PrintStream fileOut = new PrintStream("c:\\fileout.txt");

Не забываем про throws IOException при работе с файлами

public static void main(String[] args) throws IOException {

И не забываем импортировать классы:
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;