Стажировка-2015. Разработка. Занятие 8. Абстракции,...
TRANSCRIPT
Стажировка-2015
Абстракции, контракты, соглашения
Занятие 8
Стажировка-2015
There are only two hard things in Computer science: cache invalidation and naming things.
Phil Karlton
Зачем?
Стажировка-2015
Абстракция данных – скрываем детали структуры
Абстракция алгоритмов – скрываем вспомогательные функции
Принцип абстракции
Стажировка-2015
Принцип абстракции
Основная цель – улучшить понимание системы на разных уровнях
Побочный эффект –заменяемостьреализации
Стажировка-2015
Абстрактный тип данных (АТД) – описание данных и алгоритмов (функций) для манипулирования ими
Принцип абстракции
Стажировка-2015
Примеры АТД:Список (List)Стек (Stack)Очередь (Queue)Дек (Deq)Ассоциативный массив (Map)
Принцип абстракции
Стажировка-2015
Движение программистской мысли:- Машинный код- «Понятный» машинный код (ассемблер)- «Понятный» ассемблер (Си)- Структурное программирование
Принцип абстракции
Стажировка-2015
Движение программистской мысли:- Процедурное и функциональное программирование- Абстрактные типы данных- Объектно-ориентированное программирование
Принцип абстракции
Стажировка-2015
Движение программистской мысли:- Функциональное программирование (новый уровень)- Зарождающиеся подходы (виртуализация)
Принцип абстракции
Стажировка-2015
Контракт функции – спецификация, предусловие, постусловие и инвариант
Контракты
Стажировка-2015
Спецификация функции – наименование, входные и выходные параметры, выбрасываемые исключения
Контракты
Стажировка-2015
Контракт –один из способов реализации абстракции
Контракты
Стажировка-2015
Класс – один из способов реализации абстрактного типа данныхМетод класса – функция, имеющая доступ ко всем данным класса
ООП (Java)
Стажировка-2015
Спецификация метода – то же, что и спецификация функции + уровень доступа
ООП (Java)
Стажировка-2015
Контракт класса –наименование, структура наследования, набор спецификаций публичных методов
ООП (Java)
Стажировка-2015
Интерфейс – чистое описание контракта класса
В Java НЕТ множественного наследования, есть реализация нескольких интерфейсов
ООП (Java)
Стажировка-2015
Пакет – совокупность классов, либо совместно решающих общую задачу, либо дающих разные реализации одного контракта
ООП (Java)
Стажировка-2015
Принцип Единственной обязанности (Single Responsibility) – у контракта должно быть ровно одно четкое предназначениеПризнак нарушения – невозможность подобрать простое наименование
ООП (Java)
Стажировка-2015
Сущности:interface IFullName {
String getFirstName(); String getLastName(); }
interface IEmployee {
IFullName getFullName(); String getAddress(); String getWorkPhone(); String getHomePhone(); }
ООП (Java)
Стажировка-2015
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)
Стажировка-2015
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)
Стажировка-2015
Сервисы: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)
Стажировка-2015
interface IEmployeeCensus {
void addEmployee(IEmployee employee); void removeEmployee(IEmployee employee); IEmployee nextltem(); IEmployee getFirstltem(); IEmployee getLastltem(); }
ООП (Java)
Стажировка-2015
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)
Стажировка-2015
Соглашения (конвенции) именования – правила наименования всех элементов разрабатываемой системы
Соглашения
Стажировка-2015
Уровни соглашений (по возрастанию важности):языкфреймворк (библиотека)компания (команда)проектпредметная область
Соглашения
Стажировка-2015
Именование классов: –не использовать слова-связкипорядок: объект, имя существительное – суть контракта, дополнения и определения
Соглашения
Стажировка-2015
«Идеальное» имя класса – одно слово, отражающее суть
Соглашения
Стажировка-2015
Для сущностей:Employee, List, WebContext, DataSourceДля сервисов:ReportManager, ContextBuilderПлохо:AdderAndSubtracter, MyClass, Program
Соглашения
Стажировка-2015
Именование методов:не использовать слова-связки,порядок: глагол, объект действия, дополнения и определения
Соглашения
Стажировка-2015
Именование переменных:не использовать слова-связки,объект, представляемый переменной, возможно с определениемИзбегать: однобуквенных имен и сильных сокращений слов
Соглашения
Стажировка-2015
Разделение слов:либо camelCased, либо символ ‘_’ – зависит от соглашений языка
Соглашения
Стажировка-2015
Классы в Java: CamelCased, с большой буквыМетоды и переменные в Java:camelCased, с маленькой буквыПакеты в Java: одно слово с маленькой буквы, первые 2 уровня – развернутый домен
Соглашения
Стажировка-2015
Форматирование кода –правила записи операторов и других конструкций языка, расстановки пробельных символов и скобок для улучшения читабельности
Соглашения
Стажировка-2015
Помните:код пишется только 10% времени, а 90% времени его читают
Соглашения
Стажировка-2015
Документирование кода –написание комментариев к классам, методам, определениям и другим конструкциям
Документирование
Стажировка-2015
JavaDoc – утилита для сборки документации к проекту в формате HTML
Иногда так называют сами комментарии к классам и методам
Документирование
Стажировка-2015
Пример для класса:/** * Provides a company employee * entity */class Employee {
Документирование
Стажировка-2015
Пример для метода:/** * 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) {
Документирование
Стажировка-2015
Самодокументирующийся код – код, являющийся документаций сам себе и не требующий пояснений в виде комментариев
Документирование
Стажировка-2015
Хорошо документированный код – контракты документированы JavaDoc (или аналогом), тела методов – самодокументирующийся код
Документирование
Стажировка-2015
Code review – практика оценки качества кода другим разработчиком или техническим лидером
Анализ качества кода
Стажировка-2015
Парное программирование – один компьютер, клавиатура передается от одного разработчика к другому
Анализ качества кода
Стажировка-2015
Статический анализ – просмотр кода при помощи автоматизированных средств, может выполняться IDE «на лету», по триггеру или по запросу
Анализ качества кода
Стажировка-2015
CheckStyle – средство статического анализа кода для Java
Анализ качества кода