🗊Презентация Объектно-ориентированное программирование. Отношения между типами и особенности разработки. (Занятие 11)

Нажмите для полного просмотра!
Объектно-ориентированное программирование. Отношения между типами и особенности разработки. (Занятие 11), слайд №1Объектно-ориентированное программирование. Отношения между типами и особенности разработки. (Занятие 11), слайд №2Объектно-ориентированное программирование. Отношения между типами и особенности разработки. (Занятие 11), слайд №3Объектно-ориентированное программирование. Отношения между типами и особенности разработки. (Занятие 11), слайд №4Объектно-ориентированное программирование. Отношения между типами и особенности разработки. (Занятие 11), слайд №5Объектно-ориентированное программирование. Отношения между типами и особенности разработки. (Занятие 11), слайд №6Объектно-ориентированное программирование. Отношения между типами и особенности разработки. (Занятие 11), слайд №7Объектно-ориентированное программирование. Отношения между типами и особенности разработки. (Занятие 11), слайд №8Объектно-ориентированное программирование. Отношения между типами и особенности разработки. (Занятие 11), слайд №9Объектно-ориентированное программирование. Отношения между типами и особенности разработки. (Занятие 11), слайд №10Объектно-ориентированное программирование. Отношения между типами и особенности разработки. (Занятие 11), слайд №11Объектно-ориентированное программирование. Отношения между типами и особенности разработки. (Занятие 11), слайд №12Объектно-ориентированное программирование. Отношения между типами и особенности разработки. (Занятие 11), слайд №13Объектно-ориентированное программирование. Отношения между типами и особенности разработки. (Занятие 11), слайд №14Объектно-ориентированное программирование. Отношения между типами и особенности разработки. (Занятие 11), слайд №15Объектно-ориентированное программирование. Отношения между типами и особенности разработки. (Занятие 11), слайд №16Объектно-ориентированное программирование. Отношения между типами и особенности разработки. (Занятие 11), слайд №17Объектно-ориентированное программирование. Отношения между типами и особенности разработки. (Занятие 11), слайд №18Объектно-ориентированное программирование. Отношения между типами и особенности разработки. (Занятие 11), слайд №19Объектно-ориентированное программирование. Отношения между типами и особенности разработки. (Занятие 11), слайд №20Объектно-ориентированное программирование. Отношения между типами и особенности разработки. (Занятие 11), слайд №21Объектно-ориентированное программирование. Отношения между типами и особенности разработки. (Занятие 11), слайд №22Объектно-ориентированное программирование. Отношения между типами и особенности разработки. (Занятие 11), слайд №23Объектно-ориентированное программирование. Отношения между типами и особенности разработки. (Занятие 11), слайд №24Объектно-ориентированное программирование. Отношения между типами и особенности разработки. (Занятие 11), слайд №25Объектно-ориентированное программирование. Отношения между типами и особенности разработки. (Занятие 11), слайд №26Объектно-ориентированное программирование. Отношения между типами и особенности разработки. (Занятие 11), слайд №27Объектно-ориентированное программирование. Отношения между типами и особенности разработки. (Занятие 11), слайд №28Объектно-ориентированное программирование. Отношения между типами и особенности разработки. (Занятие 11), слайд №29Объектно-ориентированное программирование. Отношения между типами и особенности разработки. (Занятие 11), слайд №30Объектно-ориентированное программирование. Отношения между типами и особенности разработки. (Занятие 11), слайд №31Объектно-ориентированное программирование. Отношения между типами и особенности разработки. (Занятие 11), слайд №32Объектно-ориентированное программирование. Отношения между типами и особенности разработки. (Занятие 11), слайд №33Объектно-ориентированное программирование. Отношения между типами и особенности разработки. (Занятие 11), слайд №34Объектно-ориентированное программирование. Отношения между типами и особенности разработки. (Занятие 11), слайд №35Объектно-ориентированное программирование. Отношения между типами и особенности разработки. (Занятие 11), слайд №36Объектно-ориентированное программирование. Отношения между типами и особенности разработки. (Занятие 11), слайд №37Объектно-ориентированное программирование. Отношения между типами и особенности разработки. (Занятие 11), слайд №38Объектно-ориентированное программирование. Отношения между типами и особенности разработки. (Занятие 11), слайд №39Объектно-ориентированное программирование. Отношения между типами и особенности разработки. (Занятие 11), слайд №40Объектно-ориентированное программирование. Отношения между типами и особенности разработки. (Занятие 11), слайд №41Объектно-ориентированное программирование. Отношения между типами и особенности разработки. (Занятие 11), слайд №42Объектно-ориентированное программирование. Отношения между типами и особенности разработки. (Занятие 11), слайд №43Объектно-ориентированное программирование. Отношения между типами и особенности разработки. (Занятие 11), слайд №44Объектно-ориентированное программирование. Отношения между типами и особенности разработки. (Занятие 11), слайд №45

Содержание

Вы можете ознакомиться и скачать презентацию на тему Объектно-ориентированное программирование. Отношения между типами и особенности разработки. (Занятие 11). Доклад-сообщение содержит 45 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





Отношения между типами 
и особенности разработки
Описание слайда:
Отношения между типами и особенности разработки

Слайд 2





План лекции
Отношения между классами
Объектно-ориентированный дизайн
Принципы дизайна
Описание слайда:
План лекции Отношения между классами Объектно-ориентированный дизайн Принципы дизайна

Слайд 3





Отношения между классами
Наследование
Зависимость
Ассоциация
Описание слайда:
Отношения между классами Наследование Зависимость Ассоциация

Слайд 4





Наследование
Особенности
Описание слайда:
Наследование Особенности

Слайд 5





Зависимость
Особенности
Описание слайда:
Зависимость Особенности

Слайд 6





Ассоциация
Особенности
Описание слайда:
Ассоциация Особенности

Слайд 7





Агрегация
Особенности
Описание слайда:
Агрегация Особенности

Слайд 8





Композиция
Особенности
Описание слайда:
Композиция Особенности

Слайд 9





Метакласс
Особенности
Описание слайда:
Метакласс Особенности

Слайд 10





Ещё одна проблема разработки программ в ООП
Этапы разработки (условно)
Определение модели данных
Определение алгоритма в виде последовательности операций
Реализация на языке программирования
Проблема
Структурной единицей программы является класс
Из-за инкапсуляции модель данных связана с алгоритмом
Разделить данные и алгоритмы между классами можно далеко не единственным способом…
Описание слайда:
Ещё одна проблема разработки программ в ООП Этапы разработки (условно) Определение модели данных Определение алгоритма в виде последовательности операций Реализация на языке программирования Проблема Структурной единицей программы является класс Из-за инкапсуляции модель данных связана с алгоритмом Разделить данные и алгоритмы между классами можно далеко не единственным способом…

Слайд 11





Object-oriented design
Объектно-ориентированное проектирование – планирование системы как совокупности взаимодействующих объектов с целью решения программной задачи
Для решения задачи необходимо разделить её на части и выбрать ответственных за них
Инкапсуляция разделяет ответственности (responsibility) между классами
Результат проектирования – распределение ответственностей и активностей по классам
Описание слайда:
Object-oriented design Объектно-ориентированное проектирование – планирование системы как совокупности взаимодействующих объектов с целью решения программной задачи Для решения задачи необходимо разделить её на части и выбрать ответственных за них Инкапсуляция разделяет ответственности (responsibility) между классами Результат проектирования – распределение ответственностей и активностей по классам

Слайд 12





Характеристики дизайна
Coupling
(связанность, зависимость)
Характеристика взаимосвязи модулей
Степень того, насколько модуль зависит от других модулей
Мера ресурсов, требующихся при внесении изменений

Cohesion
(связность, сцепленность, сфокусированность, сосредоточенность)
Степень того, насколько модуль сфокусирован на решение одной задачи
Степень того, насколько элементы модуля гармонизированы, подходят друг другу
Описание слайда:
Характеристики дизайна Coupling (связанность, зависимость) Характеристика взаимосвязи модулей Степень того, насколько модуль зависит от других модулей Мера ресурсов, требующихся при внесении изменений Cohesion (связность, сцепленность, сфокусированность, сосредоточенность) Степень того, насколько модуль сфокусирован на решение одной задачи Степень того, насколько элементы модуля гармонизированы, подходят друг другу

Слайд 13





Виды связанности
Связанность содержимого (content coupling)-
Один модуль изменяет или полагается на внутренние особенности другого модуля (например, используются локальные данные другого модуля)
Изменение работы второго модуля приведёт к переписыванию первого
Связанность через общее (common coupling)-
Два модуля работают с общими данными (например, глобальной переменной)
Изменение разделяемого ресурса приведёт к изменению всех работающих с ним модулей
Описание слайда:
Виды связанности Связанность содержимого (content coupling)- Один модуль изменяет или полагается на внутренние особенности другого модуля (например, используются локальные данные другого модуля) Изменение работы второго модуля приведёт к переписыванию первого Связанность через общее (common coupling)- Два модуля работают с общими данными (например, глобальной переменной) Изменение разделяемого ресурса приведёт к изменению всех работающих с ним модулей

Слайд 14





Виды связанности
Связанность через внешнее
(external coupling)
Два модуля используют навязанный извне формат данных, протокол связи и т.д.
Обычно возникает из-за внешних сущностей (инструментов, устройств и т.д.)
Связанность по управлению (control coupling)+
Один модуль управляет поведением другого
Присутствует передача информации о том, что и как делать
Описание слайда:
Виды связанности Связанность через внешнее (external coupling) Два модуля используют навязанный извне формат данных, протокол связи и т.д. Обычно возникает из-за внешних сущностей (инструментов, устройств и т.д.) Связанность по управлению (control coupling)+ Один модуль управляет поведением другого Присутствует передача информации о том, что и как делать

Слайд 15





Виды связанности
Связанность по структурированным данным 
(data-structured coupling, stamp coupling)
Модули используют одну и ту же структуру, но каждый использует только её часть (части могут и не совпадать)
Изменение структуры может привести к изменению модуля, который изменённую часть даже не использует
Связанность через данные (data coupling)+
Модули совместно используют данные, например, через параметры
Элементарные фрагменты маленькие и только они используются модулями совместно
Описание слайда:
Виды связанности Связанность по структурированным данным (data-structured coupling, stamp coupling) Модули используют одну и ту же структуру, но каждый использует только её часть (части могут и не совпадать) Изменение структуры может привести к изменению модуля, который изменённую часть даже не использует Связанность через данные (data coupling)+ Модули совместно используют данные, например, через параметры Элементарные фрагменты маленькие и только они используются модулями совместно

Слайд 16





Виды связанности
Связанность по сообщениям 
(message coupling)
Модули общаются только через передачу параметров или сообщений
Состояние децентрализовано
Отсутствие связанности (no coupling)
Модули вообще никак не взаимодействуют
Описание слайда:
Виды связанности Связанность по сообщениям (message coupling) Модули общаются только через передачу параметров или сообщений Состояние децентрализовано Отсутствие связанности (no coupling) Модули вообще никак не взаимодействуют

Слайд 17





Виды сфокусированности
Случайная (coincidental cohesion)
Части модуля сгруппированы «от фонаря»
Единственное, что их объединяет – сам модуль
Логическая (logical cohesion)
Части модуля логически относятся к одной проблеме
При этом части могут различаться по своей природе
ВременнАя (temporal cohesion)
Части модуля обычно используются в программе в одно время, рядом
Процедурная (procedural cohesion)
Части модуля всегда используются в определённом порядке
Описание слайда:
Виды сфокусированности Случайная (coincidental cohesion) Части модуля сгруппированы «от фонаря» Единственное, что их объединяет – сам модуль Логическая (logical cohesion) Части модуля логически относятся к одной проблеме При этом части могут различаться по своей природе ВременнАя (temporal cohesion) Части модуля обычно используются в программе в одно время, рядом Процедурная (procedural cohesion) Части модуля всегда используются в определённом порядке

Слайд 18





Виды сфокусированности
По взаимодействию (communication cohesion)
Части модуля работают над одними и теми же данными
По последовательности действий 
(sequential cohesion)
Результат работы одной части модуля является исходными данными для другой
Функциональная (functional cohesion)
Части модуля направлены на решение одной чёткой задачи, за которую отвечает модуль
Описание слайда:
Виды сфокусированности По взаимодействию (communication cohesion) Части модуля работают над одними и теми же данными По последовательности действий (sequential cohesion) Результат работы одной части модуля является исходными данными для другой Функциональная (functional cohesion) Части модуля направлены на решение одной чёткой задачи, за которую отвечает модуль

Слайд 19





Плохой дизайн
Высокая связанность
Эффект кругов по воде (или снежной лавины) при внесении изменений
Сборка модулей требует большего времени и/или затрат из-за связей между модулями
Конкретный модуль может быть тяжело тестировать и/или повторно использовать
Слабая сфокусированность
Сложности с пониманием модулей
Сложности с поддержкой системы, т.к. логически согласованные изменения могут потребовать изменения многих модулей
Сложности с повторным использованием модуля, поскольку большинству приложений именно такой модуль не нужен
Описание слайда:
Плохой дизайн Высокая связанность Эффект кругов по воде (или снежной лавины) при внесении изменений Сборка модулей требует большего времени и/или затрат из-за связей между модулями Конкретный модуль может быть тяжело тестировать и/или повторно использовать Слабая сфокусированность Сложности с пониманием модулей Сложности с поддержкой системы, т.к. логически согласованные изменения могут потребовать изменения многих модулей Сложности с повторным использованием модуля, поскольку большинству приложений именно такой модуль не нужен

Слайд 20





Хороший дизайн


Loose coupling
High cohesion
Правда, эти требования друг другу противоречат
И следует это из самой природы ООП
Так что придётся искать компромисс
Описание слайда:
Хороший дизайн Loose coupling High cohesion Правда, эти требования друг другу противоречат И следует это из самой природы ООП Так что придётся искать компромисс

Слайд 21





Принципы SOLID
Single responsibility principle
Open/closed principle
Liskov substitution principle
Interface segregation principle
Dependency inversion principle
Описание слайда:
Принципы SOLID Single responsibility principle Open/closed principle Liskov substitution principle Interface segregation principle Dependency inversion principle

Слайд 22





Принципы SOLID
Описание слайда:
Принципы SOLID

Слайд 23





Single responsibility principle
Принцип единственности ответственности
Каждый класс должен иметь единственную ответственность
Эта ответственность должна быть полностью инкапсулирована в этом классе
Все сервисы класса должны быть направлены исключительно на обеспечение его ответственности
Принцип обеспечивает высокую сфокусированность
Класс имеет единственную причину для изменения
При плохой сфокусированности модификация различных ответственностей приводит к комбинаторному взрыву
Описание слайда:
Single responsibility principle Принцип единственности ответственности Каждый класс должен иметь единственную ответственность Эта ответственность должна быть полностью инкапсулирована в этом классе Все сервисы класса должны быть направлены исключительно на обеспечение его ответственности Принцип обеспечивает высокую сфокусированность Класс имеет единственную причину для изменения При плохой сфокусированности модификация различных ответственностей приводит к комбинаторному взрыву

Слайд 24





Single responsibility principle
Описание слайда:
Single responsibility principle

Слайд 25





Single responsibility principle
Описание слайда:
Single responsibility principle

Слайд 26





Single responsibility principle
Описание слайда:
Single responsibility principle

Слайд 27





Open/closed principle
Принцип открытости/закрытости
Программные сущности (классы, модули и т.п.) должны быть открыты для расширения, но закрыты для изменения
Сущности могут изменять своё поведение без изменения их исходного кода
Принцип открытости/закрытости по Мейеру
Однажды разработанная реализация класса в дальнейшем требует только исправления ошибок
Новые или изменённые функции требуют создания нового класса
Рекомендуется наследование реализации
Реализация используется повторно
Тип не обязан использовать повторно
Полиморфный принцип открытости/закрытости
Используются полностью абстрактные типы
Реализация может быть изменена, или многие реализации могут использоваться полиморфно
Рекомендуется наследование от полностью абстрактных типов
Тип используется повторно и не изменяется
Реализации должны соответствовать типу
Описание слайда:
Open/closed principle Принцип открытости/закрытости Программные сущности (классы, модули и т.п.) должны быть открыты для расширения, но закрыты для изменения Сущности могут изменять своё поведение без изменения их исходного кода Принцип открытости/закрытости по Мейеру Однажды разработанная реализация класса в дальнейшем требует только исправления ошибок Новые или изменённые функции требуют создания нового класса Рекомендуется наследование реализации Реализация используется повторно Тип не обязан использовать повторно Полиморфный принцип открытости/закрытости Используются полностью абстрактные типы Реализация может быть изменена, или многие реализации могут использоваться полиморфно Рекомендуется наследование от полностью абстрактных типов Тип используется повторно и не изменяется Реализации должны соответствовать типу

Слайд 28





Open/closed principle
Описание слайда:
Open/closed principle

Слайд 29





Open/closed principle
Описание слайда:
Open/closed principle

Слайд 30





Open/closed principle
Описание слайда:
Open/closed principle

Слайд 31





Liskov substitution principle
Принцип подстановки Барбары Лисковой
Пусть q(x) является свойством, верным относительно объектов x некоторого типа T. Тогда q(y) должно быть верным для объектов y типа S, где S является подтипом типа T
(Р.С. Мартин) Использующие базовый тип функции должны иметь возможность использовать подтипы базового типа не зная об этом
(Б. Мейер) Дочерний класс не должен нарушать контракт родительского класса
Требования к сигнатурам операций дочерних классов
Типы аргументов не должны быть уже
Типы возвращаемых значений не должны быть шире
Не должны выбрасываться новые типы исключений, кроме случаев, когда новое исключение является подтипом исключения из родительской сигнатуры
Область доступа операции не должна сужаться
Описание слайда:
Liskov substitution principle Принцип подстановки Барбары Лисковой Пусть q(x) является свойством, верным относительно объектов x некоторого типа T. Тогда q(y) должно быть верным для объектов y типа S, где S является подтипом типа T (Р.С. Мартин) Использующие базовый тип функции должны иметь возможность использовать подтипы базового типа не зная об этом (Б. Мейер) Дочерний класс не должен нарушать контракт родительского класса Требования к сигнатурам операций дочерних классов Типы аргументов не должны быть уже Типы возвращаемых значений не должны быть шире Не должны выбрасываться новые типы исключений, кроме случаев, когда новое исключение является подтипом исключения из родительской сигнатуры Область доступа операции не должна сужаться

Слайд 32





Liskov substitution principle
Описание слайда:
Liskov substitution principle

Слайд 33





Liskov substitution principle
Описание слайда:
Liskov substitution principle

Слайд 34





Liskov substitution principle
Описание слайда:
Liskov substitution principle

Слайд 35





Interface segregation principle
Принцип разделения интерфейсов
Клиенты не должны зависеть от методов, которые они не используют
Интерфейсы должны быть сфокусированными
Большие интерфейсы должны разделяться на более мелкие и узкоспециальные
Такие интерфейсы (полностью абстрактные типы) скорее имеют роль тегов, чем организуют свою иерархию наследования
Описание слайда:
Interface segregation principle Принцип разделения интерфейсов Клиенты не должны зависеть от методов, которые они не используют Интерфейсы должны быть сфокусированными Большие интерфейсы должны разделяться на более мелкие и узкоспециальные Такие интерфейсы (полностью абстрактные типы) скорее имеют роль тегов, чем организуют свою иерархию наследования

Слайд 36





Interface segregation principle
Описание слайда:
Interface segregation principle

Слайд 37





Dependency inversion principle
Принцип инверсии зависимостей
Модули верхних уровней не должны зависеть от модулей нижних уровней. Оба типа модулей должны зависеть от абстракций
Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций
Высокоуровневые и низкоуровневые компоненты взаимодействуют через абстрактный интерфейс
Интерфейс описывается как часть высокоуровневого компонента
Получается, что низкоуровневый компонент зависит от высокоуровневого, а не наоборот
Это позволяет заменять низкоуровневые компоненты, не изменяя высокоуровневых
Следование принципу снижает связанность
Значительно упрощает разработку сложных систем
Описание слайда:
Dependency inversion principle Принцип инверсии зависимостей Модули верхних уровней не должны зависеть от модулей нижних уровней. Оба типа модулей должны зависеть от абстракций Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций Высокоуровневые и низкоуровневые компоненты взаимодействуют через абстрактный интерфейс Интерфейс описывается как часть высокоуровневого компонента Получается, что низкоуровневый компонент зависит от высокоуровневого, а не наоборот Это позволяет заменять низкоуровневые компоненты, не изменяя высокоуровневых Следование принципу снижает связанность Значительно упрощает разработку сложных систем

Слайд 38





Dependency inversion principle
Описание слайда:
Dependency inversion principle

Слайд 39





Dependency inversion principle
Описание слайда:
Dependency inversion principle

Слайд 40





Dependency inversion principle
Описание слайда:
Dependency inversion principle

Слайд 41





Law of Demeter
Закон Деметры (принцип наименьшего знания)
Каждый модуль должен обладать ограниченным знанием о других модулях: должен знать только о модулях, которые имеют к нему непосредственное отношение
Каждый модуль должен взаимодействовать только с известными ему модулями и не должен «разговаривать с незнакомыми»
Каждый модуль должен обращаться только к своим непосредственным друзьям
Объект A может вызвать сервис (метод) объекта B, но не может использовать объект B для получения доступа к объекту C, чтобы использовать его методы
Метод m() объекта O может вызывать только 
методы следующих объектов
Сам объект O
Объекты-параметры метода m()
Любые объекты, созданные в ходе выполнения m()
Объектов, непосредственно ассоциированных с O
Глобальные переменные, доступные O в контексте m()
Описание слайда:
Law of Demeter Закон Деметры (принцип наименьшего знания) Каждый модуль должен обладать ограниченным знанием о других модулях: должен знать только о модулях, которые имеют к нему непосредственное отношение Каждый модуль должен взаимодействовать только с известными ему модулями и не должен «разговаривать с незнакомыми» Каждый модуль должен обращаться только к своим непосредственным друзьям Объект A может вызвать сервис (метод) объекта B, но не может использовать объект B для получения доступа к объекту C, чтобы использовать его методы Метод m() объекта O может вызывать только методы следующих объектов Сам объект O Объекты-параметры метода m() Любые объекты, созданные в ходе выполнения m() Объектов, непосредственно ассоциированных с O Глобальные переменные, доступные O в контексте m()

Слайд 42





Принцип YAGNI
You ain’t gonna need it
Реализуйте что-то, только
 если оно вам 
действительно нужно
Не реализуйте что-то, 
использование чего вы
только предвидите
Требуется разумный баланс со здравым смыслом
Описание слайда:
Принцип YAGNI You ain’t gonna need it Реализуйте что-то, только если оно вам действительно нужно Не реализуйте что-то, использование чего вы только предвидите Требуется разумный баланс со здравым смыслом

Слайд 43





Принцип KISS
Keep it simple, stupid
Keep it simple and stupid
Keep it short and simple
Простота должна быть одной из основных целей в ходе разработки
Следует уходить от необоснованных сложностей
Описание слайда:
Принцип KISS Keep it simple, stupid Keep it simple and stupid Keep it short and simple Простота должна быть одной из основных целей в ходе разработки Следует уходить от необоснованных сложностей

Слайд 44





Спасибо за внимание!
Описание слайда:
Спасибо за внимание!

Слайд 45





Дополнительные источники
Мейер, Б. Объектно-ориентированное конструирование программных систем [Текст] / Бертран Мейер. – М. : Русская редакция, 2005. – 1204 с.
Мейер, Б. Почувствуй класс: учимся программировать хорошо с объектами и контрактами [Текст] / Бертран Мейер. – М. : Интернет-университет информационных технологий, 2011. – 776 с.
Мартин, Р.К. Быстрая разработка программ. Принципы, примеры, практика [Текст] / Роберт К. Мартин, Джеймс В. Ньюкирк, Роберт С. Косс. – М. : Издательский дом «Вильямс», 2004. – 752 с.
Мартин, Р. Чистый код. Создание, анализ и рефакторинг [Текст] / Роберт Мартин. – СПб : Питер, 2011. – 464 с.
Мартин, Р. Идеальный программист. Как стать профессионалом разработки ПО [Текст] / Роберт Мартин. – СПб : Питер, 2012. – 224 с.
Описание слайда:
Дополнительные источники Мейер, Б. Объектно-ориентированное конструирование программных систем [Текст] / Бертран Мейер. – М. : Русская редакция, 2005. – 1204 с. Мейер, Б. Почувствуй класс: учимся программировать хорошо с объектами и контрактами [Текст] / Бертран Мейер. – М. : Интернет-университет информационных технологий, 2011. – 776 с. Мартин, Р.К. Быстрая разработка программ. Принципы, примеры, практика [Текст] / Роберт К. Мартин, Джеймс В. Ньюкирк, Роберт С. Косс. – М. : Издательский дом «Вильямс», 2004. – 752 с. Мартин, Р. Чистый код. Создание, анализ и рефакторинг [Текст] / Роберт Мартин. – СПб : Питер, 2011. – 464 с. Мартин, Р. Идеальный программист. Как стать профессионалом разработки ПО [Текст] / Роберт Мартин. – СПб : Питер, 2012. – 224 с.



Похожие презентации
Mypresentation.ru
Загрузить презентацию