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

46
Спецкурс ОмГУ-2014 Абстракции, контракты, соглашения Занятие 3

description

Занятие на спецкурсе в ОмГУ, 2014 год.

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

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

Спецкурс ОмГУ-2014

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

Занятие 3

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

Спецкурс ОмГУ-2014

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

Phil Karlton

Зачем?

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

Спецкурс ОмГУ-2014

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

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

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

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

Спецкурс ОмГУ-2014

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

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

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

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

Спецкурс ОмГУ-2014

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

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

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

Спецкурс ОмГУ-2014

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

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

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

Спецкурс ОмГУ-2014

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

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

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

Спецкурс ОмГУ-2014

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

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

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

Спецкурс ОмГУ-2014

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

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

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

Спецкурс ОмГУ-2014

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

Контракты

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

Спецкурс ОмГУ-2014

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

Контракты

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

Спецкурс ОмГУ-2014

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

Контракты

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

Спецкурс ОмГУ-2014

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

ООП (Java)

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

Спецкурс ОмГУ-2014

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

ООП (Java)

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

Спецкурс ОмГУ-2014

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

ООП (Java)

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

Спецкурс ОмГУ-2014

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

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

ООП (Java)

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

Спецкурс ОмГУ-2014

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

ООП (Java)

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

Спецкурс ОмГУ-2014

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

ООП (Java)

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

Спецкурс ОмГУ-2014

Сущности:

interface IFullName {

String getFirstName();String getLastName();

}

interface IEmployee {

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

}

ООП (Java)

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

Спецкурс ОмГУ-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)

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

Спецкурс ОмГУ-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)

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

Спецкурс ОмГУ-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)

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

Спецкурс ОмГУ-2014

interface IEmployeeCensus {

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

}

ООП (Java)

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

Спецкурс ОмГУ-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)

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

Спецкурс ОмГУ-2014

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

Соглашения

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

Спецкурс ОмГУ-2014

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

Соглашения

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

Спецкурс ОмГУ-2014

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

Соглашения

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

Спецкурс ОмГУ-2014

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

Соглашения

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

Спецкурс ОмГУ-2014

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

Соглашения

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

Спецкурс ОмГУ-2014

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

Соглашения

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

Спецкурс ОмГУ-2014

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

Соглашения

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

Спецкурс ОмГУ-2014

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

Соглашения

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

Спецкурс ОмГУ-2014

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

Соглашения

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

Спецкурс ОмГУ-2014

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

Соглашения

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

Спецкурс ОмГУ-2014

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

Соглашения

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

Спецкурс ОмГУ-2014

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

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

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

Спецкурс ОмГУ-2014

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

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

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

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

Спецкурс ОмГУ-2014

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

class Employee {

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

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

Спецкурс ОмГУ-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

) {

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

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

Спецкурс ОмГУ-2014

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

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

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

Спецкурс ОмГУ-2014

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

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

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

Спецкурс ОмГУ-2014

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

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

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

Спецкурс ОмГУ-2014

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

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

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

Спецкурс ОмГУ-2014

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

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

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

Спецкурс ОмГУ-2014

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

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

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

Спецкурс ОмГУ-2014

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

Вопросы?