Спецкурс ОмГУ-2014
Абстракции, контракты,
соглашения
Занятие 3
Спецкурс ОмГУ-2014
There are only two hard things in
Computer science: cache
invalidation and naming things.
Phil Karlton
Зачем?
Спецкурс ОмГУ-2014
Абстракция данных – скрываем
детали структуры
Абстракция алгоритмов –
скрываем вспомогательные
функции
Принцип абстракции
Спецкурс ОмГУ-2014
Принцип абстракции
Основная цель – улучшить
понимание системы на
разных уровнях
Побочный эффект –
заменяемость
реализации
Спецкурс ОмГУ-2014
Абстрактный тип данных
(АТД) – описание данных и
алгоритмов (функций) для
манипулирования ими
Принцип абстракции
Спецкурс ОмГУ-2014
Примеры АТД:
Список (List)
Стек (Stack)
Очередь (Queue)
Дек (Deq)
Ассоциативный массив (Map)
Принцип абстракции
Спецкурс ОмГУ-2014
Движение программистской
мысли:
- Машинный код
- «Понятный» машинный код
(ассемблер)
- «Понятный» ассемблер (Си)
- Структурное программирование
Принцип абстракции
Спецкурс ОмГУ-2014
Движение программистской
мысли:
- Процедурное и функциональное
программирование
- Абстрактные типы данных
- Объектно-ориентированное
программирование
Принцип абстракции
Спецкурс ОмГУ-2014
Движение программистской
мысли:
- Функциональное
программирование (новый
уровень)
- Зарождающиеся подходы
(виртуализация)
Принцип абстракции
Спецкурс ОмГУ-2014
Контракт функции –
спецификация, предусловие,
постусловие и инвариант
Контракты
Спецкурс ОмГУ-2014
Спецификация функции –
наименование, входные и
выходные параметры,
выбрасываемые исключения
Контракты
Спецкурс ОмГУ-2014
Контракт –
один из способов реализации
абстракции
Контракты
Спецкурс ОмГУ-2014
Класс –
один из способов реализации
абстрактного типа данных
Метод класса –
функция, имеющая доступ ко
всем данным класса
ООП (Java)
Спецкурс ОмГУ-2014
Спецификация метода – то
же, что и спецификация
функции + уровень доступа
ООП (Java)
Спецкурс ОмГУ-2014
Контракт класса –
наименование, структура
наследования, набор
спецификаций публичных
методов
ООП (Java)
Спецкурс ОмГУ-2014
Интерфейс –
чистое описание контракта класса
В Java НЕТ множественного
наследования, есть реализация
нескольких интерфейсов
ООП (Java)
Спецкурс ОмГУ-2014
Пакет –
совокупность классов, либо
совместно решающих общую
задачу, либо дающих разные
реализации одного контракта
ООП (Java)
Спецкурс ОмГУ-2014
Принцип Единственной
обязанности (Single Responsibility)
– у контракта должно быть ровно
одно четкое предназначение
Признак нарушения –
невозможность подобрать
простое наименование
ООП (Java)
Спецкурс ОмГУ-2014
Сущности:
interface IFullName {
String getFirstName();
String getLastName();
}
interface IEmployee {
IFullName getFullName();
String getAddress();
String getWorkPhone();
String getHomePhone();
}
ООП (Java)
Спецкурс ОмГУ-2014
public class FullName implements IFullName {
private String firstName;
private String lastName;
public FullName(
final String firstName, final String lastName
) {
this.firstName = firstName;
this.lastName = lastName;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
public void setFirstName(
final String firstName
) {
this.firstName = firstName;
}
public void setLastName(
final String lastName
) {
this.lastName = lastName;
}
}
ООП (Java)
Спецкурс ОмГУ-2014
public class Employee implements IEmployee {
private FullName name;
private String address;
private String workPhone;
private String homePhone;
public Employee() {
}
public Employee (
final FullName name,
final String address,
final String workPhone,
final String homePhone,
) {
…
}
public IFullName getFullName() …
public String getAddress() …
public String getWorkPhone() …
public String getHomePhone() …
public void setFullName(final FullName name) …
public void setAddress(final String address) …
public void setWorkPhone(
final String workPhone
) …
public void setHomePhone(
final String homePhone
) …
}
ООП (Java)
Спецкурс ОмГУ-2014
Сервисы:
interface Program {
void InitializeCommandStack();
void PushCommand(Command command);
Command PopCommand();
void ShutdownCommandStack();
void InitializeReportFormatting();
void FormatReport(Report report);
void PrintReport(Report report);
void InitializeGlobalData();
void ShutdownGlobalData();
}
ООП (Java)
Спецкурс ОмГУ-2014
interface IEmployeeCensus {
void addEmployee(IEmployee employee);
void removeEmployee(IEmployee employee);
IEmployee nextltem();
IEmployee getFirstltem();
IEmployee getLastltem();
}
ООП (Java)
Спецкурс ОмГУ-2014
interface IEmployeeCensus {
void addEmployee(IEmployee employee);
void removeEmployee(IEmployee employee);
IEmployee getNextEmployee();
IEmployee getFirstEmployee();
IEmployee getLastEmployee();
}
public class EmployeeCensus implements IEmployeeCensus {
private IListContainer employeeList;
…
}
ООП (Java)
Спецкурс ОмГУ-2014
Соглашения (конвенции)
именования – правила
наименования всех элементов
разрабатываемой системы
Соглашения
Спецкурс ОмГУ-2014
Уровни соглашений (по
возрастанию важности):
язык
фреймворк (библиотека)
компания (команда)
проект
предметная область
Соглашения
Спецкурс ОмГУ-2014
Именование классов: –
не использовать слова-связки
порядок: объект, имя
существительное – суть
контракта, дополнения и
определения
Соглашения
Спецкурс ОмГУ-2014
«Идеальное» имя класса –
одно слово, отражающее суть
Соглашения
Спецкурс ОмГУ-2014
Для сущностей:
Employee, List, WebContext,
DataSource
Для сервисов:
ReportManager, ContextBuilder
Плохо:
AdderAndSubtracter, MyClass,
Program
Соглашения
Спецкурс ОмГУ-2014
Именование методов:
не использовать слова-связки,
порядок: глагол, объект
действия, дополнения и
определения
Соглашения
Спецкурс ОмГУ-2014
Именование переменных:
не использовать слова-связки,
объект, представляемый
переменной, возможно с
определением
Избегать: однобуквенных имен и
сильных сокращений слов
Соглашения
Спецкурс ОмГУ-2014
Разделение слов:
либо camelCased, либо символ
‘_’ – зависит от соглашений
языка
Соглашения
Спецкурс ОмГУ-2014
Классы в Java: CamelCased, с
большой буквы
Методы и переменные в Java:
camelCased, с маленькой буквы
Пакеты в Java: одно слово с
маленькой буквы, первые 2
уровня – развернутый домен
Соглашения
Спецкурс ОмГУ-2014
Форматирование кода –
правила записи операторов и
других конструкций языка,
расстановки пробельных
символов и скобок для
улучшения читабельности
Соглашения
Спецкурс ОмГУ-2014
Помните:
код пишется только 10%
времени, а 90% времени его
читают
Соглашения
Спецкурс ОмГУ-2014
Документирование кода –
написание комментариев к
классам, методам,
определениям и другим
конструкциям
Документирование
Спецкурс ОмГУ-2014
JavaDoc – утилита для сборки
документации к проекту в
формате HTML
Иногда так называют сами
комментарии к классам и методам
Документирование
Спецкурс ОмГУ-2014
Пример для класса:
/**
* Provides a company employee
* entity
*/
class Employee {
Документирование
Спецкурс ОмГУ-2014
Пример для метода:
/**
* Counts employees in a given container
* @param employeeContainer a container of employees
* @return a count of employees in a given container
*/
int countEmployees(
final EmployeeContainer employeeContainer
) {
Документирование
Спецкурс ОмГУ-2014
Самодокументирующийся код
– код, являющийся
документаций сам себе и не
требующий пояснений в виде
комментариев
Документирование
Спецкурс ОмГУ-2014
Хорошо документированный
код – контракты
документированы JavaDoc (или
аналогом), тела методов –
самодокументирующийся код
Документирование
Спецкурс ОмГУ-2014
Code review – практика оценки
качества кода другим
разработчиком или
техническим лидером
Анализ качества кода
Спецкурс ОмГУ-2014
Парное программирование –
один компьютер, клавиатура
передается от одного
разработчика к другому
Анализ качества кода
Спецкурс ОмГУ-2014
Статический анализ –
просмотр кода при помощи
автоматизированных средств,
может выполняться IDE «на
лету», по триггеру или по
запросу
Анализ качества кода
Спецкурс ОмГУ-2014
CheckStyle – средство
статического анализа кода для
Java
Анализ качества кода
Спецкурс ОмГУ-2014
Email: at@7bits.it
Skype: anna_tarasenko
Web: 7bits.ru
Вопросы?

Спецкурс 2014, занятие 3. Абстракции, именование, документирование