Стажировка-2014, занятие 2 (часть 1). Абстракции,...

39
Стажировка-2014 . Абстракции, контракты, соглашения Занятие 2 (часть 1)

Upload: 7bits

Post on 08-Jul-2015

108 views

Category:

Education


4 download

TRANSCRIPT

Page 1: Стажировка-2014, занятие 2 (часть 1). Абстракции, именование, документирование

Стажировка-2014.

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

Занятие 2 (часть 1)

Page 2: Стажировка-2014, занятие 2 (часть 1). Абстракции, именование, документирование

Стажировка-2014.

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

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

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

Page 3: Стажировка-2014, занятие 2 (часть 1). Абстракции, именование, документирование

Стажировка-2014.

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

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

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

Page 4: Стажировка-2014, занятие 2 (часть 1). Абстракции, именование, документирование

Стажировка-2014.

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

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

Page 5: Стажировка-2014, занятие 2 (часть 1). Абстракции, именование, документирование

Стажировка-2014.

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

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

Page 6: Стажировка-2014, занятие 2 (часть 1). Абстракции, именование, документирование

Стажировка-2014.

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

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

Page 7: Стажировка-2014, занятие 2 (часть 1). Абстракции, именование, документирование

Стажировка-2014.

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

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

Page 8: Стажировка-2014, занятие 2 (часть 1). Абстракции, именование, документирование

Стажировка-2014.

Движение программистской мысли:Объектно-ориентированное программированиеФункциональное программирование (новый уровень)

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

Page 9: Стажировка-2014, занятие 2 (часть 1). Абстракции, именование, документирование

Стажировка-2014.

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

Контракты

Page 10: Стажировка-2014, занятие 2 (часть 1). Абстракции, именование, документирование

Стажировка-2014.

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

Контракты

Page 11: Стажировка-2014, занятие 2 (часть 1). Абстракции, именование, документирование

Стажировка-2014.

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

Контракты

Page 12: Стажировка-2014, занятие 2 (часть 1). Абстракции, именование, документирование

Стажировка-2014.

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

ООП (Java)

Page 13: Стажировка-2014, занятие 2 (часть 1). Абстракции, именование, документирование

Стажировка-2014.

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

ООП (Java)

Page 14: Стажировка-2014, занятие 2 (часть 1). Абстракции, именование, документирование

Стажировка-2014.

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

ООП (Java)

Page 15: Стажировка-2014, занятие 2 (часть 1). Абстракции, именование, документирование

Стажировка-2014.

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

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

ООП (Java)

Page 16: Стажировка-2014, занятие 2 (часть 1). Абстракции, именование, документирование

Стажировка-2014.

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

ООП (Java)

Page 17: Стажировка-2014, занятие 2 (часть 1). Абстракции, именование, документирование

Стажировка-2014.

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

ООП (Java)

Page 18: Стажировка-2014, занятие 2 (часть 1). Абстракции, именование, документирование

Стажировка-2014.

Сущности:

interface IFullName {

String getFirstName();String getLastName();

}

interface IEmployee {

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

}

ООП (Java)

Page 19: Стажировка-2014, занятие 2 (часть 1). Абстракции, именование, документирование

Стажировка-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 20: Стажировка-2014, занятие 2 (часть 1). Абстракции, именование, документирование

Стажировка-2014.

public class Employee implements IEmployee {

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 21: Стажировка-2014, занятие 2 (часть 1). Абстракции, именование, документирование

Стажировка-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 22: Стажировка-2014, занятие 2 (часть 1). Абстракции, именование, документирование

Стажировка-2014.

interface IEmployeeCensus extends IListContainer {

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

}

ООП (Java)

Page 23: Стажировка-2014, занятие 2 (часть 1). Абстракции, именование, документирование

Стажировка-2014.

interface IEmployeeCensus { void addEmployee(IEmployee employee); void removeEmployee(IEmployee employee); IEmployee getNextEmployee(); IEmployee getFirstEmployee(); IEmployee getLastEmployee();

}

public class EmployeeCensus implements IEmployeeCensus {private IListContainer m_EmployeeList; …

}

ООП (Java)

Page 24: Стажировка-2014, занятие 2 (часть 1). Абстракции, именование, документирование

Стажировка-2014.

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

Соглашения

Page 25: Стажировка-2014, занятие 2 (часть 1). Абстракции, именование, документирование

Стажировка-2014.

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

Соглашения

Page 26: Стажировка-2014, занятие 2 (часть 1). Абстракции, именование, документирование

Стажировка-2014.

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

Соглашения

Page 27: Стажировка-2014, занятие 2 (часть 1). Абстракции, именование, документирование

Стажировка-2014.

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

Соглашения

Page 28: Стажировка-2014, занятие 2 (часть 1). Абстракции, именование, документирование

Стажировка-2014.

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

Соглашения

Page 29: Стажировка-2014, занятие 2 (часть 1). Абстракции, именование, документирование

Стажировка-2014.

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

Соглашения

Page 30: Стажировка-2014, занятие 2 (часть 1). Абстракции, именование, документирование

Стажировка-2014.

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

Соглашения

Page 31: Стажировка-2014, занятие 2 (часть 1). Абстракции, именование, документирование

Стажировка-2014.

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

Соглашения

Page 32: Стажировка-2014, занятие 2 (часть 1). Абстракции, именование, документирование

Стажировка-2014.

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

Соглашения

Page 33: Стажировка-2014, занятие 2 (часть 1). Абстракции, именование, документирование

Стажировка-2014.

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

Соглашения

Page 34: Стажировка-2014, занятие 2 (часть 1). Абстракции, именование, документирование

Стажировка-2014.

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

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

Page 35: Стажировка-2014, занятие 2 (часть 1). Абстракции, именование, документирование

Стажировка-2014.

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

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

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

Page 36: Стажировка-2014, занятие 2 (часть 1). Абстракции, именование, документирование

Стажировка-2014.

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

class Employee {

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

Page 37: Стажировка-2014, занятие 2 (часть 1). Абстракции, именование, документирование

Стажировка-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 38: Стажировка-2014, занятие 2 (часть 1). Абстракции, именование, документирование

Стажировка-2014.

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

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

Page 39: Стажировка-2014, занятие 2 (часть 1). Абстракции, именование, документирование

Стажировка-2014.

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

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