Академический Документы
Профессиональный Документы
Культура Документы
SOLID принципі.
Бекарыстанқызы Ақбаян
Үлгі деген не?
• Жобалау үлгісі— бұл бағдарлама архитектурасын құру кезінде нақты бір проблемаларды шешуге жиі
қооданылатын шешім. Бұл нақты код емес – шешім концепциясы.
• Паттерн проектирования — это часто встречающееся решение определённой проблемы при
проектировании архитектуры программ. Паттерн пред- ставляет собой не какой-то конкретный код, а
общую концепцию решения той или иной проблемы, которую нужно будет ещё подстроить под нужды
вашей программы.
Паттерн неден тұрады?
• Үлгі шешетін проблема;
• Үлгі ұсынатын шешу жолын қолдану мотивациясв;
• Шешімді құрайтын класстардың құрылымы;
• Бағдарламалау тілдерінің бірінде берілген мысал;
• Әртүрлі контексттерде жүзеге асыру ерекшеліктері;
• Басқа үлгілермен байланыстары.
Из чего состоит паттерн?
• проблема, которую решает паттерн;
• мотивации к решению проблемы способом, который пред- лагает
паттерн;
• структуры классов, составляющих решение;
• примера на одном из языков программирования;
• особенностей реализации в различных контекстах;
• связей с другими паттернами.
Үлгілерді жіктеу
• Тудырушы үлгілер - бағдарламаға артық тәуелділіктер енгізбестен объектілерді оңай құру жолдарын
қарастырады.
• Құрылымдық үлгілер - объектілер арасында байланыстар орнатудың түрлі жолдарын көрсетеді.
• Әрекеттік үлгілер объектілер арасында тиімді қарым-қатынастар орнатуды қарастырады.
Классификация паттернов
• Порождающие паттерны беспокоятся о гибком создании объектов без внесения в программу лишних
зависимостей.
• Структурные паттерны показывают различные способы построения связей между объектами.
• Поведенческие паттерны заботятся об эффективной комму- никации между объектами.
Үлгілерді кім ойлап тапты?
• Концепцию паттернов впервые описал Кристофер Александер в книге Язык
шаблонов. Города. Здания. Строительство. В книге описан «язык» для
проектирования окружающей среды, единицы которого — шаблоны (или
паттерны, что ближе к оригинальному термину patterns) — отвечают на
архитектурные вопросы: какой высоты сделать окна, сколько этажей должно
быть в здании, какую площадь в микро- районе отвести под деревья и
газоны.
• Идея показалась заманчивой четвёрке авторов: Эриху Гамме, Ричарду Хелму,
Ральфу Джонсону, Джону Влиссиде- су. В 1994 году они написали книгу
Design Patterns: Elements of Reusable Object-Oriented Software, в которую
вошли 23 паттерна, решающие различные проблемы объектно-ориен-
тированного дизайна. Название книги было слишком длин- ным, чтобы кто-
то смог всерьёз его запомнить. Поэтому вскоре все стали называть её “book
by the gang of four”, то есть «книга от банды четырёх», а затем и вовсе “GoF
book”.
Үлгілерді білу не үшін керек?
• Тексерілген шешімдер
• Кодты стандарттау
• Программистерге ортақ сөздік
Зачем знать паттерны?
• Проверенные решения. Вы тратите меньше времени, используя готовые решения, вместо повторного
изобрете- ния велосипеда. До некоторых решений вы смогли бы доду- маться и сами, но многие могут
быть для вас открытием.
• Стандартизация кода. Вы делаете меньше просчётов при проектировании, используя типовые
унифицированные решения, так как все скрытые проблемы в них уже давно найдены.
• Общий программистский словарь. Вы произносите назва- ние паттерна, вместо того, чтобы час
объяснять другим про- граммистам, какой крутой дизайн вы придумали и какие классы для этого
нужны.
Жақсы архитектура сапасы
• Кодты қайта қолдану
• Бағдарламаны кеңейту
Качество хорошей архитектуры
• Повторное использование кода
• Расширяемость
Жобалаудың негізгі принциптері
• Өзгеретіннің барлығына инкапсуляция қолданыңыз
• Әдіс деңгейінде
• Класс деңгейінде
• Интерфейс деңгейінде жазыңыз
• Туынды класстар орнына композиция қолданыңыз
Базовые принципы проектирования
• Подкласс не может отказаться от интерфейса или реализации своего родителя. Вы должны будете
реализовать все абстрактные методы родителя, даже если они не нужны для конкретного подкласса.
• Переопределяя методы родителя, вы должны заботиться о том, чтобы не сломать базовое поведение
суперкласса. Это важно, ведь подкласс может быть использован в любом коде, работающим с
суперклассом.
• Наследование нарушает инкапсуляцию суперкласса, так как подклассам доступны детали родителя.
Суперклассы могут сами стать зависимыми от подклассов, например, если программист вынесет в
суперкласс какие-то общие детали подклассов, чтобы облегчить дальнейшее наследование.
• Подклассы слишком тесно связаны с родительским классом. Любое изменение в родителе может
сломать поведение в подклассах.
• Повторное использование кода через наследование может привести к разрастанию иерархии
классов.
Пример
• Предположим, вам нужно смоделировать модельный ряд автопроизводителя. У вас есть легковые
автомобили и гру- зовики. Причём они бывают с электрическим двигателем и с двигателем на бензине.
К тому же они отличаются режи- мами навигации: есть модели с ручным управлением и автопилотом.
SOLID
• Классы верхних уровней не должны зависеть от классов нижних уровней. Оба должны зависеть от
абстракций. Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.