Синтаксис объявления классов. Атрибуты, связанные и несвязанные методы, __dict__, __slots__. Статические методы и методы класса. Свойства, декоратор @property. Наследование, перегрузка методов и функция super. Декораторы классов. Магические методы.
Зачем тестировать? Тестирование в интерпретаторе и доктесты. Модуль unittest. Пакет py.test - на порядок лучше. Тестирование свойств и пакет hypothesis.
Лекция 8. Итераторы, генераторы и модуль itertools.Roman Brovko
Два протокола итераторов: __next__ + __iter__ и __getitem__. Итераторы и цикл for, а также операторы in и not in. Генераторы, оператор-выражение yield. Генераторы как: итераторы, сопрограммы, менеджеры контекста. Модуль itertools.
Синтаксис объявления классов. Атрибуты, связанные и несвязанные методы, __dict__, __slots__. Статические методы и методы класса. Свойства, декоратор @property. Наследование, перегрузка методов и функция super. Декораторы классов. Магические методы.
Зачем тестировать? Тестирование в интерпретаторе и доктесты. Модуль unittest. Пакет py.test - на порядок лучше. Тестирование свойств и пакет hypothesis.
Лекция 8. Итераторы, генераторы и модуль itertools.Roman Brovko
Два протокола итераторов: __next__ + __iter__ и __getitem__. Итераторы и цикл for, а также операторы in и not in. Генераторы, оператор-выражение yield. Генераторы как: итераторы, сопрограммы, менеджеры контекста. Модуль itertools.
В презентации рассказывается о структурах памяти в JVM: Heap, Non-Heap, Stack, об атомарности операций и о garbage collector. Рассмотрен пример, как работает стек. Также, приведены примеры, как использовать jVisualVM и что она может показать.
Статический анализ кода: Что? Как? Зачем?Andrey Karpov
Методология статического анализа год за годом зарекомендовывает себя в поисках дефектов в исходном коде программ.
Максим расскажет про:
- методологию статического анализа и какие плюсы и минусы у нее есть;
- технологии этой методологии, которые позволяют выявлять разнообразнейшие дефекты в коде;
- интересные примеры ошибок в реальных проектах, которые были найдены при помощи статического анализа;
- интеграцию инструментов статического анализа в проекты любой сложности, и почему так важно регулярное использование подобных инструментов.
Программирование как способ выражения мыслей. Levon Avakyan
Я расскажу на простейших примерах как функционирует современный компьютер, какие языки программирования бывают, для чего они используются, какие парадигмы лежат в их основе. По сути, язык программирования это инструмент, с помощью которого можно рассказать машине, чего же мы от неё хотим, тем самым воплотив свои мысли.
The 2-nd lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
Дело тестера боится: как в опытных руках могут заиграть Java и TestNgIT61
Вячеслав Марков, QA engineer в Weezlabs
Я расскажу о том, как в нашей фирме организовано тестирование бэкенда с помощью тестового фреймворка TestNG и Java. Расскажу о data-driven тестировании и о том, почему его удобно применять. Покажу и опишу разработанную нами структуру типового тестового проекта. Представлю применяемые нами способы сбора и документирования результатов, а так же их анализ в условиях CI.
Roslyn API: SyntaxTree vs CodeDom, SemanticModel vs ReflectionDenis Tsvettsih
Презентация к докладу «Roslyn API: SyntaxTree vs CodeDom, SemanticModel vs Reflection» с конференции .NEXT SPb 2015 (Санкт-Петербург, 5 июня 2015)
http://spb2015.dotnext.ru/#cvetkih_talk
Гуманитарные специальности в IT-индустрии
Анна Астахова, старший аккаунт-менеджер в компании Nоveо.
Noveo — международная IT‑компания. Наши главные офисы разработки ПО находятся в Новосибирске и Санкт-Петербурге, представительства — в Москве, Париже, Лондоне и Сиэтле.
2. Аннотации
Аннотации – набор мета-данных, который
может быть приложен к части программного
кода.
Аннотации могут применяться к:
1. Классам
2. Методам
3. Полям
4. Конструкторам
5. Другим аннотациям
Аннотации2
19. Java IO
Поток(stream) – это некоторая
абстракция, представляющая
последовательность данных. Input stream
используется для чтения данных, output
stream – для записи.
Java IO19
21. Java IO
Пример чтения/записи
public void processFile() {
FileInputStream in = null;
FileOutputStream out = null;
try {
in = new FileInputStream(…);
out = new FileOutputStream(…);
int c;
while ((c = in.read()) != -1) {
out.write( c );
}
} catch(Exception e) {
//do something
}finally {
if (in!=null) in.close();
if (out!=null) out.close();
}
}
Java IO21
23. Java IO
Буферизация
Байтовые потоки
In = new FileInputStream(…);
Out = new FileOutputStream(…);
BufferedInputStream input = new BufferedInputStream(in);
BufferedOutputStream output = new
BufferedOutputStream(out);
Символьные потоки
r = new FileReader(…);
w = new FileWriter(…);
BufferedReader reader = new BufferedReader( r)
BufferedWriter writer = new BufferedWriter(w);
Java IO23
28. Generics
Обобщения (Generics) – механизм,
позволяющий параметризовать классы,
интерфейсы и отдельные методы и
улучшить возможности по проверке типов
на стадии компиляции.
Generics28
29. Generics
Пример
public class Box<T> {
private T value;
public T getValue() {
return value;
}
public setValue(T value) {
this.value = value;
}
}
Использование:
Box<String> box = new Box<String>();
Generics29
30. Generics
Ограничения типов
public class Box<T extends Number> {
private T value;
public T getValue() {
return value;
}
public setValue(T value) {
this.value = value;
}
}
Использование:
Box<Integer> intBox = new Box<Integer> (); //ok
Box<String> stringBox = new Box<String>(); //compilation error
Generics30
34. Generics
Wildcard. Ограничения
public void consumeBox(Box<? extends Number>
box) {
//можно использовать методы Number.
box.getValue().intValue();
}
public void consumeBox(Box<? super Integer> box)
{
}
Generics34
35. Generics
Стирание типов
• Все параметры без ограничений
стираются до Object;
• Все параметры с ограничением
стираются до типа-ограничения;
• Добавляются операторы приведения
типа, если это необходимо;
Generics35
36. Generics
Стирание типов. Пример.
До стирания
public class Box<T> {
private T value;
public T getValue() {
return value;
}
public setValue(T value) {
this.value =
value;
}
}
После
public class Box {
private Object value;
public Object getValue() {
return value;
}
public setValue(Object
value){
this.value = value;
}
}
Generics36
38. Практическое задание
https://github.com/noveogroup/university-android-
SecondJavaTask
1. Создать иерархию из трех классов вида «1 Родитель – 2
потомка»;
2. Реализовать бинарное дерево, которое сможет хранить
классы из иерархии п.1 (использовать generics) и только
их. Класс дерева должен поддерживать вставку,
удаление и итерирование элементов;
3. Реализовать собственную иерархию исключений для
бинарного дерева из п.2;
4. Реализовать сериализацию/десериализацию дерева из
файла. Кроме самого дерева, необходимо складывать в
файл количество листьев в нем (custom serialization).
Практика38