Java 2015 — различия между версиями
Antonk (обсуждение | вклад) (→Задания) |
Antonk (обсуждение | вклад) (→Лекции и контрольные) |
||
(не показано 19 промежуточных версий 2 участников) | |||
Строка 2: | Строка 2: | ||
Практика - Антон Михайлович Кузнецов | Практика - Антон Михайлович Кузнецов | ||
+ | |||
+ | == Результаты == | ||
+ | |||
+ | [https://docs.google.com/spreadsheet/ccc?key=0Aif17q2hwUt4dE9MbnFmaXBzb2xaT2JuSTlWU0RNLUE&usp=sharing Результаты] | ||
== Лекции и контрольные == | == Лекции и контрольные == | ||
Строка 8: | Строка 12: | ||
*[[Медиа:Java2014_02.pdf|Лекция 2]] | *[[Медиа:Java2014_02.pdf|Лекция 2]] | ||
*[[Медиа:Java2014_03.pdf|Лекция 3]] | *[[Медиа:Java2014_03.pdf|Лекция 3]] | ||
+ | *[[Медиа:Java2014_04.pdf|Лекция 4]] | ||
+ | *[[Медиа:Java2014_05.pdf|Лекция 5]] [[Медиа:Java2014_05_Examples.zip|Примеры]] | ||
+ | *[[Медиа:Java2015_05.pdf|Лекция 6]] | ||
+ | *[[Медиа:Java2015_06_examples.zip|Примеры]] | ||
+ | *[[Медиа:Java2015_07.zip|Примеры]] | ||
+ | *[[Медиа:Java_2014_08.pdf|Лекция 8]] | ||
+ | *[[Медиа:Java_2014_09.pdf|Лекция 9]] | ||
+ | *[[Медиа:Java_2014_10.pdf|Лекция 10]] | ||
+ | *[[Медиа:Java_2015_11.pdf|Лекция 11]] | ||
== Задания == | == Задания == | ||
* [[Медиа:Java2015_Task02.pdf|Первое задание]] срок сдачи: 1 марта. | * [[Медиа:Java2015_Task02.pdf|Первое задание]] срок сдачи: 1 марта. | ||
+ | * [[Медиа:Java2015_Task03.pdf|Второе задание]] срок сдачи: (<b>22 марта</b>). | ||
+ | * [[Медиа:Java2015_Task04.pdf|Третье задание]] срок сдачи: (<b>30 марта</b>). | ||
+ | * [[Медиа:Java2015_Task05.pdf|Четвертое задание]] (ПРЕДВАРИТЕЛЬНАЯ ВЕРСИЯ) срок сдачи: (<b>3 мая</b>). | ||
+ | * [[Медиа:Java_2015_Task05.pdf|Пятое задание]] срок сдачи: 29 мая. | ||
+ | |||
+ | * [[Медиа:Java_2015_Task06.pdf|Шестое задание]] срок сдачи: до 20 июня. Это не обязательное задание. Максимум - 20 баллов. | ||
+ | |||
+ | Присылать задачи нужно на почту <b>anton.m.kuznetsov@gmail.com</b> и темой: <b>Java homework <фамилия> tasks 01,02,03...</b> | ||
+ | |||
+ | Вопросы можно задать по тому же почтовому адресу с темой <b>Java question</b>. | ||
+ | |||
+ | == Рекомендуемая литература == | ||
+ | * "Thinking in Java", Bruce Eckel | ||
+ | * "Effective Java", Joshua Bloch | ||
+ | |||
+ | == Coding conventions == | ||
+ | В отличие от C++, для Java есть [http://www.oracle.com/technetwork/java/codeconvtoc-136057.html общепринятые coding conventions] от компании Sun. | ||
+ | |||
+ | В первую очередь обратите внимание на Naming Conventions. Настоятельно рекомендуется отдавать предпочтение длинным мнемоническим идентификаторам. | ||
+ | |||
+ | == Некоторые требования == | ||
+ | |||
+ | === Форма поставки кода === | ||
+ | Задания должны присылаться в jar архивах. В архивы включаются <b>только ваши исходники</b> (.java файлы). | ||
+ | |||
+ | Для создания архивов используйте [http://docs.oracle.com/javase/tutorial/deployment/jar/build.html утилиту jar]. | ||
+ | |||
+ | Каждая задача должна находиться в пакете <b>ru.spbau.<ваша фамилия>.task<# задания></b> | ||
+ | |||
+ | В качестве точки входа должен использоваться класс с именем <b>Main</b>, если явно не указано другого. | ||
+ | |||
+ | Можете складывать несколько заданий в один архив. | ||
+ | |||
+ | === Javadoc === | ||
+ | Ко всем классам, интерфейсам и public/protected полям и методам <b>должен быть написан</b> осмысленный [http://www.oracle.com/technetwork/java/javase/documentation/index-137868.html#requiredtags javadoc] на грамотном английском языке. | ||
+ | |||
+ | Javadoc должен быть валидным (в частности, содержать все [http://www.oracle.com/technetwork/java/javase/documentation/index-137868.html#requiredtags required tags]). Также должен быть указан @author. | ||
+ | |||
+ | Настоятельно рекомендуется использовать консольные или встроенные в IDE <b>средства проверки валидности javadoc</b>. | ||
+ | |||
+ | Пример сносного javadoc-а можно найти в любом классе стандартной библиотеки. | ||
+ | |||
+ | === Exceptions === | ||
+ | При проверке ваших решений большое внимание будет уделяться тому как вы работаете с исключениями. | ||
+ | |||
+ | Распространенные недочеты: | ||
+ | * Использование исключений для управления логикой программы | ||
+ | * Оборачивание проверяемых исключений в непроверяемые | ||
+ | * Подавление исключений | ||
+ | * Отсутствие вывода <b>читаемой</b> полезной информации в блоках обработки ошибок | ||
+ | * Некорректное освобождение используемых ресурсов (в первую очередь, открытых ранее файлов) | ||
+ | * Перехват исключений слишком общeго типа | ||
+ | |||
+ | == Общие замечания == | ||
+ | * Некоторым вашим классам может понадобиться больше public методов, чем те, которые перечислены в условиях задач. | ||
+ | * Добавление дополнительных уровней абстракции приветствуется в том случае, если вы готовы обосновать принятые вами решения. | ||
+ | |||
+ | == FAQ == | ||
+ | Q: Можно ли использовать finalize для закрытия открытых файлов? | ||
+ | |||
+ | A: Нет, нельзя. На лекциях обязательно будет разобрано почему. | ||
+ | |||
+ | |||
+ | Q: Нужно ли всегда использовать утилиту ant? | ||
+ | |||
+ | A: Нет, не нужно. С ней обязательно попрактикуемся отдельно, использовать ее не обязательно. | ||
+ | |||
+ | |||
+ | Q: Нужно ли присылать какие-либо файлы помимо .java (metadata, build.xml)? | ||
+ | |||
+ | A: Нет, не нужно. Стандартный манифест файл, генерируемой утилитой jar, конечно можно оставить в архиве. | ||
+ | |||
+ | == Примеры работы с "файловыми" исключениями == | ||
+ | |||
+ | Ниже приведены три известных нам способа корректно перехватить и обработать исключения при чтении из файла (аналогично для записи). | ||
+ | |||
+ | Можете использовать тот, который вам больше по душе. | ||
+ | |||
+ | <source lang="java"> | ||
+ | /** | ||
+ | * The way I always tried to use dealing with "file-reading" exceptions. | ||
+ | */ | ||
+ | public static void firstExample() { | ||
+ | String filename = "filename"; | ||
+ | try { | ||
+ | BufferedReader reader = new BufferedReader(new FileReader(filename)); | ||
+ | String line; | ||
+ | try { | ||
+ | while ((line = reader.readLine()) != null) { | ||
+ | /*TODO something*/ | ||
+ | System.out.println(line); | ||
+ | } | ||
+ | } catch (IOException e) { | ||
+ | System.err.println("Strange IOException happened during reading. Message: " + e.getMessage()); | ||
+ | e.printStackTrace(); | ||
+ | } finally { | ||
+ | try { | ||
+ | reader.close(); | ||
+ | } catch (IOException e) { | ||
+ | System.err.println("Strange IOException happened during closing file. Message: " + e.getMessage()); | ||
+ | e.printStackTrace(); | ||
+ | } | ||
+ | } | ||
+ | } catch (FileNotFoundException e) { | ||
+ | System.err.println("Couldn't find file: " + filename); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /** | ||
+ | * The way to get rid of one level of try blocks. | ||
+ | * Significantly reduces depth when dealing with several files. | ||
+ | */ | ||
+ | public static void secondExample() { | ||
+ | String filename = "filename"; | ||
+ | BufferedReader reader = null; | ||
+ | try { | ||
+ | reader = new BufferedReader(new FileReader(filename)); | ||
+ | String line; | ||
+ | while ((line = reader.readLine()) != null) { | ||
+ | /*TODO something*/ | ||
+ | System.out.println(line); | ||
+ | } | ||
+ | } catch (FileNotFoundException e) { | ||
+ | System.err.println("Couldn't find file: " + filename); | ||
+ | } catch (IOException e) { | ||
+ | System.err.println("Strange IOException happened during reading. Message: " + e.getMessage()); | ||
+ | e.printStackTrace(); | ||
+ | } finally { | ||
+ | if (reader != null) { | ||
+ | try { | ||
+ | reader.close(); | ||
+ | } catch (IOException e) { | ||
+ | System.err.println("Strange IOException happened during closing file. Message: " + e.getMessage()); | ||
+ | e.printStackTrace(); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /** | ||
+ | * Brand new Java7 way of dealing with this example. | ||
+ | * Uses try-with-resources statement. | ||
+ | * For more information see: | ||
+ | * http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html | ||
+ | * Remark: some exceptions that you dealt with in two previous examples might be suppressed here. | ||
+ | */ | ||
+ | public static void thirdExample() { | ||
+ | String filename = "filename"; | ||
+ | try (BufferedReader reader = new BufferedReader(new FileReader(filename))) { | ||
+ | String line; | ||
+ | while ((line = reader.readLine()) != null) { | ||
+ | /*TODO something*/ | ||
+ | System.out.println(line); | ||
+ | } | ||
+ | } catch (FileNotFoundException e) { | ||
+ | System.err.println("Couldn't find file: " + filename); | ||
+ | } catch (IOException e) { | ||
+ | System.err.println("Strange IOException happened. Message: " + e.getMessage()); | ||
+ | e.printStackTrace(); | ||
+ | } | ||
+ | } | ||
+ | </source> | ||
+ | |||
[[Category:5 курс. Весна 2015]] | [[Category:5 курс. Весна 2015]] |
Текущая версия на 23:33, 12 июня 2015
Лектор - Антон Михайлович Кузнецов (anton.m.kuznetsov@gmail.com)
Практика - Антон Михайлович Кузнецов
Содержание
Результаты
Лекции и контрольные
- Лекция 1
- Лекция 2
- Лекция 3
- Лекция 4
- Лекция 5 Примеры
- Лекция 6
- Примеры
- Примеры
- Лекция 8
- Лекция 9
- Лекция 10
- Лекция 11
Задания
- Первое задание срок сдачи: 1 марта.
- Второе задание срок сдачи: (22 марта).
- Третье задание срок сдачи: (30 марта).
- Четвертое задание (ПРЕДВАРИТЕЛЬНАЯ ВЕРСИЯ) срок сдачи: (3 мая).
- Пятое задание срок сдачи: 29 мая.
- Шестое задание срок сдачи: до 20 июня. Это не обязательное задание. Максимум - 20 баллов.
Присылать задачи нужно на почту anton.m.kuznetsov@gmail.com и темой: Java homework <фамилия> tasks 01,02,03...
Вопросы можно задать по тому же почтовому адресу с темой Java question.
Рекомендуемая литература
- "Thinking in Java", Bruce Eckel
- "Effective Java", Joshua Bloch
Coding conventions
В отличие от C++, для Java есть общепринятые coding conventions от компании Sun.
В первую очередь обратите внимание на Naming Conventions. Настоятельно рекомендуется отдавать предпочтение длинным мнемоническим идентификаторам.
Некоторые требования
Форма поставки кода
Задания должны присылаться в jar архивах. В архивы включаются только ваши исходники (.java файлы).
Для создания архивов используйте утилиту jar.
Каждая задача должна находиться в пакете ru.spbau.<ваша фамилия>.task<# задания>
В качестве точки входа должен использоваться класс с именем Main, если явно не указано другого.
Можете складывать несколько заданий в один архив.
Javadoc
Ко всем классам, интерфейсам и public/protected полям и методам должен быть написан осмысленный javadoc на грамотном английском языке.
Javadoc должен быть валидным (в частности, содержать все required tags). Также должен быть указан @author.
Настоятельно рекомендуется использовать консольные или встроенные в IDE средства проверки валидности javadoc.
Пример сносного javadoc-а можно найти в любом классе стандартной библиотеки.
Exceptions
При проверке ваших решений большое внимание будет уделяться тому как вы работаете с исключениями.
Распространенные недочеты:
- Использование исключений для управления логикой программы
- Оборачивание проверяемых исключений в непроверяемые
- Подавление исключений
- Отсутствие вывода читаемой полезной информации в блоках обработки ошибок
- Некорректное освобождение используемых ресурсов (в первую очередь, открытых ранее файлов)
- Перехват исключений слишком общeго типа
Общие замечания
- Некоторым вашим классам может понадобиться больше public методов, чем те, которые перечислены в условиях задач.
- Добавление дополнительных уровней абстракции приветствуется в том случае, если вы готовы обосновать принятые вами решения.
FAQ
Q: Можно ли использовать finalize для закрытия открытых файлов?
A: Нет, нельзя. На лекциях обязательно будет разобрано почему.
Q: Нужно ли всегда использовать утилиту ant?
A: Нет, не нужно. С ней обязательно попрактикуемся отдельно, использовать ее не обязательно.
Q: Нужно ли присылать какие-либо файлы помимо .java (metadata, build.xml)?
A: Нет, не нужно. Стандартный манифест файл, генерируемой утилитой jar, конечно можно оставить в архиве.
Примеры работы с "файловыми" исключениями
Ниже приведены три известных нам способа корректно перехватить и обработать исключения при чтении из файла (аналогично для записи).
Можете использовать тот, который вам больше по душе.
/**
* The way I always tried to use dealing with "file-reading" exceptions.
*/
public static void firstExample() {
String filename = "filename";
try {
BufferedReader reader = new BufferedReader(new FileReader(filename));
String line;
try {
while ((line = reader.readLine()) != null) {
/*TODO something*/
System.out.println(line);
}
} catch (IOException e) {
System.err.println("Strange IOException happened during reading. Message: " + e.getMessage());
e.printStackTrace();
} finally {
try {
reader.close();
} catch (IOException e) {
System.err.println("Strange IOException happened during closing file. Message: " + e.getMessage());
e.printStackTrace();
}
}
} catch (FileNotFoundException e) {
System.err.println("Couldn't find file: " + filename);
}
}
/**
* The way to get rid of one level of try blocks.
* Significantly reduces depth when dealing with several files.
*/
public static void secondExample() {
String filename = "filename";
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(filename));
String line;
while ((line = reader.readLine()) != null) {
/*TODO something*/
System.out.println(line);
}
} catch (FileNotFoundException e) {
System.err.println("Couldn't find file: " + filename);
} catch (IOException e) {
System.err.println("Strange IOException happened during reading. Message: " + e.getMessage());
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
System.err.println("Strange IOException happened during closing file. Message: " + e.getMessage());
e.printStackTrace();
}
}
}
}
/**
* Brand new Java7 way of dealing with this example.
* Uses try-with-resources statement.
* For more information see:
* http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html
* Remark: some exceptions that you dealt with in two previous examples might be suppressed here.
*/
public static void thirdExample() {
String filename = "filename";
try (BufferedReader reader = new BufferedReader(new FileReader(filename))) {
String line;
while ((line = reader.readLine()) != null) {
/*TODO something*/
System.out.println(line);
}
} catch (FileNotFoundException e) {
System.err.println("Couldn't find file: " + filename);
} catch (IOException e) {
System.err.println("Strange IOException happened. Message: " + e.getMessage());
e.printStackTrace();
}
}