Java 2013 — различия между версиями
Snurk (обсуждение | вклад) (→Exceptions) |
Antonk (обсуждение | вклад) (→Условия получения зачета) |
||
(не показаны 34 промежуточные версии 3 участников) | |||
Строка 6: | Строка 6: | ||
[https://docs.google.com/spreadsheet/pub?key=0Aif17q2hwUt4dG12aDM0MjI3NlJiOVdXVHpXNVA4alE&output=html Текущий рейтинг] | [https://docs.google.com/spreadsheet/pub?key=0Aif17q2hwUt4dG12aDM0MjI3NlJiOVdXVHpXNVA4alE&output=html Текущий рейтинг] | ||
+ | |||
+ | == Условия получения зачета == | ||
+ | |||
+ | Общие условия получения зачета - зачесть контрольную работу (для этого договориться с АМ о том, когда ее написать), сдать 9 лабораторных работ, устно побеседовать с преподавателем. Итоговая оценка будет ставиться исходя из количества набранных баллов и ваших ответов в устной беседе. | ||
+ | |||
+ | Примерное количество баллов | ||
+ | #на оценку удовлетворительно - 60 | ||
+ | #на оценку хорошо - 70 | ||
+ | #на оценку отлично - 80 | ||
== Лекции == | == Лекции == | ||
Строка 13: | Строка 22: | ||
*[http://neerc.ifmo.ru/~kgeorgiy/courses/java-advanced/slides/exceptions.pps Лекция 3 (часть 1)]<br>[[Медиа:Java_2013_03_2.ppt|Лекция 3 (часть 2)]] | *[http://neerc.ifmo.ru/~kgeorgiy/courses/java-advanced/slides/exceptions.pps Лекция 3 (часть 1)]<br>[[Медиа:Java_2013_03_2.ppt|Лекция 3 (часть 2)]] | ||
*[[Java_2013-02-27|Лекция 4]] | *[[Java_2013-02-27|Лекция 4]] | ||
+ | *[[Медиа:Java_2013_05.ppt|Лекция 5 (часть 2)]] | ||
+ | *[[Медиа:Java_2013_05-2.ppt|Лекция 6]] | ||
+ | *[[Медиа:Java_2013_06.ppt|Лекция 7 (Reflection)]] | ||
+ | *[[Медиа:Java_2013_08.ppt|Лекция 8 (Многопоточное программирование)]] | ||
+ | *[[Медиа:Java_2013_09.ppt|Лекция 9 (java.util.concurrent)]] | ||
+ | *[[Java_Swing_2013|Лекция 10]] | ||
+ | *[[Java_Serialization_2013|Лекция 11]] | ||
− | == | + | == Задания == |
* [http://mit.spbau.ru/sewiki/images/3/35/Java_hmw_2013_02_20.pdf Первое задание] срок сдачи: 20 февраля | * [http://mit.spbau.ru/sewiki/images/3/35/Java_hmw_2013_02_20.pdf Первое задание] срок сдачи: 20 февраля | ||
* [http://mit.spbau.ru/sewiki/images/e/e4/Java_hmw_2013_02_27.pdf Второе задание] срок сдачи: 27 февраля | * [http://mit.spbau.ru/sewiki/images/e/e4/Java_hmw_2013_02_27.pdf Второе задание] срок сдачи: 27 февраля | ||
* [http://mit.spbau.ru/sewiki/images/d/db/Java_hmw_2013_03_06.pdf Третье задание] срок сдачи: 06 марта | * [http://mit.spbau.ru/sewiki/images/d/db/Java_hmw_2013_03_06.pdf Третье задание] срок сдачи: 06 марта | ||
* [[Java_2013_HW4|Четвертое задание]] срок сдачи: 13 марта | * [[Java_2013_HW4|Четвертое задание]] срок сдачи: 13 марта | ||
− | + | * [http://mit.spbau.ru/sewiki/images/c/c4/Java_hmw_2013_03_20.pdf Пятое задание] срок сдачи: <b>продлен до 27 марта</b> | |
+ | * [http://mit.spbau.ru/sewiki/images/7/79/Java_hmw_2013_04_03.pdf Шестое задание] срок сдачи: 3 апреля | ||
+ | * [http://mit.spbau.ru/sewiki/images/f/fb/Java_hmw_2013_04_10.pdf Седьмое задание] срок сдачи: 10 апреля | ||
+ | * [[Java 2013 CW1|Контрольная работа]] | ||
+ | * [[Java_2013_HW8|Восьмое задание]] срок сдачи: 17 апреля | ||
+ | * [http://mit.spbau.ru/sewiki/images/4/4c/Java_hmw_2013_9.pdf Девятое задание] срок сдачи 1 мая <b>или</b> [http://mit.spbau.ru/sewiki/images/7/75/Java_2013_10.pdf Десятое задание] срок сдачи 15 мая и вес <b>20 баллов</b>. Десятое задание для тех, кто хотел поприменять java.util.concurrent (предупреждение: вам потребуется самостоятельно немного почитать про сеть, сокеты и т.п. ) | ||
+ | * [[Java_2013_HW10|Одиннадцатое задание]] срок сдачи 12 мая | ||
+ | * [[Java 2013 CW2|Контрольная работа - 2]] | ||
Присылать задачи нужно на почту <b>sergeynurk@gmail.com</b> с копией <b>anton.m.kuznetsov@gmail.com</b> и темой: <b>Java homework <фамилия> tasks 1,2,3...</b> | Присылать задачи нужно на почту <b>sergeynurk@gmail.com</b> с копией <b>anton.m.kuznetsov@gmail.com</b> и темой: <b>Java homework <фамилия> tasks 1,2,3...</b> | ||
Строка 41: | Строка 64: | ||
Каждая задача должна находиться в пакете <b>ru.spbau.<ваша фамилия>.task<# задания></b> | Каждая задача должна находиться в пакете <b>ru.spbau.<ваша фамилия>.task<# задания></b> | ||
+ | |||
+ | В качестве точки входа должен использоваться класс с именем <b>Main</b>. | ||
Можете складывать несколько заданий в один архив. | Можете складывать несколько заданий в один архив. |
Текущая версия на 12:22, 3 июня 2013
Лектор - Кузнецов Антон
Практика - Нурк Сергей
Содержание
Рейтинг
Условия получения зачета
Общие условия получения зачета - зачесть контрольную работу (для этого договориться с АМ о том, когда ее написать), сдать 9 лабораторных работ, устно побеседовать с преподавателем. Итоговая оценка будет ставиться исходя из количества набранных баллов и ваших ответов в устной беседе.
Примерное количество баллов
- на оценку удовлетворительно - 60
- на оценку хорошо - 70
- на оценку отлично - 80
Лекции
- Лекция 1
- Лекция 2
- Лекция 3 (часть 1)
Лекция 3 (часть 2) - Лекция 4
- Лекция 5 (часть 2)
- Лекция 6
- Лекция 7 (Reflection)
- Лекция 8 (Многопоточное программирование)
- Лекция 9 (java.util.concurrent)
- Лекция 10
- Лекция 11
Задания
- Первое задание срок сдачи: 20 февраля
- Второе задание срок сдачи: 27 февраля
- Третье задание срок сдачи: 06 марта
- Четвертое задание срок сдачи: 13 марта
- Пятое задание срок сдачи: продлен до 27 марта
- Шестое задание срок сдачи: 3 апреля
- Седьмое задание срок сдачи: 10 апреля
- Контрольная работа
- Восьмое задание срок сдачи: 17 апреля
- Девятое задание срок сдачи 1 мая или Десятое задание срок сдачи 15 мая и вес 20 баллов. Десятое задание для тех, кто хотел поприменять java.util.concurrent (предупреждение: вам потребуется самостоятельно немного почитать про сеть, сокеты и т.п. )
- Одиннадцатое задание срок сдачи 12 мая
- Контрольная работа - 2
Присылать задачи нужно на почту sergeynurk@gmail.com с копией anton.m.kuznetsov@gmail.com и темой: Java homework <фамилия> tasks 1,2,3...
Вопросы можно задать по тому же почтовому адресу с темой 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).
Настоятельно рекоммендуется использовать консольные или встроенные в 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();
}
}