Спецкурс 2014, занятие 3. Абстракции, именование,...
description
Transcript of Спецкурс 2014, занятие 3. Абстракции, именование,...
Спецкурс ОмГУ-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
Анализ качества кода