Стажировка-2015. Разработка. Занятие 8. Абстракции,...

46
Стажировка-2015 Абстракции, контракты, соглашения Занятие 8

Upload: 7bits

Post on 13-Apr-2017

196 views

Category:

Education


2 download

TRANSCRIPT

Page 1: Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование

Стажировка-2015

Абстракции, контракты, соглашения

Занятие 8

Page 2: Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование

Стажировка-2015

There are only two hard things in Computer science: cache invalidation and naming things.

Phil Karlton

Зачем?

Page 3: Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование

Стажировка-2015

Абстракция данных – скрываем детали структуры

Абстракция алгоритмов – скрываем вспомогательные функции

Принцип абстракции

Page 4: Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование

Стажировка-2015

Принцип абстракции

Основная цель – улучшить понимание системы на разных уровнях

Побочный эффект –заменяемостьреализации

Page 5: Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование

Стажировка-2015

Абстрактный тип данных (АТД) – описание данных и алгоритмов (функций) для манипулирования ими

Принцип абстракции

Page 6: Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование

Стажировка-2015

Примеры АТД:Список (List)Стек (Stack)Очередь (Queue)Дек (Deq)Ассоциативный массив (Map)

Принцип абстракции

Page 7: Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование

Стажировка-2015

Движение программистской мысли:- Машинный код- «Понятный» машинный код (ассемблер)- «Понятный» ассемблер (Си)- Структурное программирование

Принцип абстракции

Page 8: Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование

Стажировка-2015

Движение программистской мысли:- Процедурное и функциональное программирование- Абстрактные типы данных- Объектно-ориентированное программирование

Принцип абстракции

Page 9: Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование

Стажировка-2015

Движение программистской мысли:- Функциональное программирование (новый уровень)- Зарождающиеся подходы (виртуализация)

Принцип абстракции

Page 10: Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование

Стажировка-2015

Контракт функции – спецификация, предусловие, постусловие и инвариант

Контракты

Page 11: Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование

Стажировка-2015

Спецификация функции – наименование, входные и выходные параметры, выбрасываемые исключения

Контракты

Page 12: Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование

Стажировка-2015

Контракт –один из способов реализации абстракции

Контракты

Page 13: Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование

Стажировка-2015

Класс – один из способов реализации абстрактного типа данныхМетод класса – функция, имеющая доступ ко всем данным класса

ООП (Java)

Page 14: Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование

Стажировка-2015

Спецификация метода – то же, что и спецификация функции + уровень доступа

ООП (Java)

Page 15: Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование

Стажировка-2015

Контракт класса –наименование, структура наследования, набор спецификаций публичных методов

ООП (Java)

Page 16: Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование

Стажировка-2015

Интерфейс – чистое описание контракта класса

В Java НЕТ множественного наследования, есть реализация нескольких интерфейсов

ООП (Java)

Page 17: Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование

Стажировка-2015

Пакет – совокупность классов, либо совместно решающих общую задачу, либо дающих разные реализации одного контракта

ООП (Java)

Page 18: Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование

Стажировка-2015

Принцип Единственной обязанности (Single Responsibility) – у контракта должно быть ровно одно четкое предназначениеПризнак нарушения – невозможность подобрать простое наименование

ООП (Java)

Page 19: Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование

Стажировка-2015

Сущности:interface IFullName {

String getFirstName(); String getLastName(); }

interface IEmployee {

IFullName getFullName(); String getAddress(); String getWorkPhone(); String getHomePhone(); }

ООП (Java)

Page 20: Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование

Стажировка-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)

Page 21: Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование

Стажировка-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)

Page 22: Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование

Стажировка-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)

Page 23: Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование

Стажировка-2015

interface IEmployeeCensus {

void addEmployee(IEmployee employee); void removeEmployee(IEmployee employee); IEmployee nextltem(); IEmployee getFirstltem(); IEmployee getLastltem(); }

ООП (Java)

Page 24: Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование

Стажировка-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)

Page 25: Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование

Стажировка-2015

Соглашения (конвенции) именования – правила наименования всех элементов разрабатываемой системы

Соглашения

Page 26: Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование

Стажировка-2015

Уровни соглашений (по возрастанию важности):языкфреймворк (библиотека)компания (команда)проектпредметная область

Соглашения

Page 27: Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование

Стажировка-2015

Именование классов: –не использовать слова-связкипорядок: объект, имя существительное – суть контракта, дополнения и определения

Соглашения

Page 28: Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование

Стажировка-2015

«Идеальное» имя класса – одно слово, отражающее суть

Соглашения

Page 29: Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование

Стажировка-2015

Для сущностей:Employee, List, WebContext, DataSourceДля сервисов:ReportManager, ContextBuilderПлохо:AdderAndSubtracter, MyClass, Program

Соглашения

Page 30: Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование

Стажировка-2015

Именование методов:не использовать слова-связки,порядок: глагол, объект действия, дополнения и определения

Соглашения

Page 31: Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование

Стажировка-2015

Именование переменных:не использовать слова-связки,объект, представляемый переменной, возможно с определениемИзбегать: однобуквенных имен и сильных сокращений слов

Соглашения

Page 32: Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование

Стажировка-2015

Разделение слов:либо camelCased, либо символ ‘_’ – зависит от соглашений языка

Соглашения

Page 33: Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование

Стажировка-2015

Классы в Java: CamelCased, с большой буквыМетоды и переменные в Java:camelCased, с маленькой буквыПакеты в Java: одно слово с маленькой буквы, первые 2 уровня – развернутый домен

Соглашения

Page 34: Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование

Стажировка-2015

Форматирование кода –правила записи операторов и других конструкций языка, расстановки пробельных символов и скобок для улучшения читабельности

Соглашения

Page 35: Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование

Стажировка-2015

Помните:код пишется только 10% времени, а 90% времени его читают

Соглашения

Page 36: Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование

Стажировка-2015

Документирование кода –написание комментариев к классам, методам, определениям и другим конструкциям

Документирование

Page 37: Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование

Стажировка-2015

JavaDoc – утилита для сборки документации к проекту в формате HTML

Иногда так называют сами комментарии к классам и методам

Документирование

Page 38: Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование

Стажировка-2015

Пример для класса:/** * Provides a company employee * entity */class Employee {

Документирование

Page 39: Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование

Стажировка-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) {

Документирование

Page 40: Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование

Стажировка-2015

Самодокументирующийся код – код, являющийся документаций сам себе и не требующий пояснений в виде комментариев

Документирование

Page 41: Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование

Стажировка-2015

Хорошо документированный код – контракты документированы JavaDoc (или аналогом), тела методов – самодокументирующийся код

Документирование

Page 42: Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование

Стажировка-2015

Code review – практика оценки качества кода другим разработчиком или техническим лидером

Анализ качества кода

Page 43: Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование

Стажировка-2015

Парное программирование – один компьютер, клавиатура передается от одного разработчика к другому

Анализ качества кода

Page 44: Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование

Стажировка-2015

Статический анализ – просмотр кода при помощи автоматизированных средств, может выполняться IDE «на лету», по триггеру или по запросу

Анализ качества кода

Page 45: Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование

Стажировка-2015

CheckStyle – средство статического анализа кода для Java

Анализ качества кода

Page 46: Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование

Стажировка-2015

Email: [email protected]: anna_tarasenkoWeb: 7bits.ru

Вопросы?