Главная страница
Навигация по странице:

  • Об обложке ................................................................................ 254

  • Мэтт Вайсфельд

  • Авторские права на иллюстрации

  • Объектно-ориентированный подход. Объектно_ориентированный_подход. Объектно ориентированный подход Мэтт Вайсфельд 5е международное издание ббк 32. 973. 2018


    Скачать 5.43 Mb.
    НазваниеОбъектно ориентированный подход Мэтт Вайсфельд 5е международное издание ббк 32. 973. 2018
    АнкорОбъектно-ориентированный подход
    Дата31.03.2023
    Размер5.43 Mb.
    Формат файлаpdf
    Имя файлаОбъектно_ориентированный_подход.pdf
    ТипДокументы
    #1028905
    страница2 из 25
    1   2   3   4   5   6   7   8   9   ...   25
    Глава 8. Фреймворки.и.повторное.использование:.проектирование.
    с.применением.интерфейсов.и.абстрактных.классов........................................162
    Код:.использовать.повторно.или.нет?..........................................................162
    Что.такое.фреймворк?.................................................................................163
    Что.такое.контракт?......................................................................................166
    Абстрактные.классы................................................................................166
    Интерфейсы............................................................................................170
    Связываем.все.воедино..........................................................................172
    Код,.выдерживающий.проверку.компилятором.......................................175
    Заключение.контракта............................................................................176
    Системные.«точки.расширения».............................................................179

    11
    .Оглавление.
    Пример.из.сферы.электронного.бизнеса.....................................................179
    Проблема,.касающаяся.электронного.бизнеса.......................................179
    Подход.без.повторного.использования.кода...........................................180
    Решение.для.электронного.бизнеса........................................................183
    Объектная.модель.UML...........................................................................183
    Резюме........................................................................................................188
    Ссылки.........................................................................................................188
    Глава 9. Создание.объектов.и.объектно-ориентированное.проектирование....189
    Отношения.композиции...............................................................................190
    Поэтапное.создание....................................................................................191
    Типы.композиции.........................................................................................194
    Агрегации...............................................................................................194
    Ассоциации.............................................................................................195
    Использование.ассоциаций.в.сочетании.с.агрегациями..........................196
    Избегание.зависимостей.............................................................................197
    Кардинальность...........................................................................................198
    Ассоциации,.включающие.множественные.объекты................................200
    Необязательные.ассоциации..................................................................202
    Связываем.все.воедино:.пример..................................................................203
    Резюме........................................................................................................204
    Ссылки.........................................................................................................204
    Глава 10. Паттерны.проектирования................................................................205
    Чем.хороши.паттерны.проектирования?.......................................................206
    Схема.«Модель.—.Представление.—.Контроллер».в.языке.Smalltalk.............207
    Типы.паттернов.проектирования..................................................................209
    Порождающие.паттерны.........................................................................210
    Структурные.паттерны............................................................................215
    Паттерны.поведения...............................................................................218
    Антипаттерны...............................................................................................219
    Заключение..................................................................................................221
    Ссылки.........................................................................................................221

    12
    .Оглавление
    Глава 11. Избегание.зависимостей.и.тесно.связанных.классов........................222
    Композиция.против.наследования.и.внедрения.зависимостей....................225 1..Наследование.....................................................................................225 2..Композиция.........................................................................................227
    Внедрение.зависимостей.......................................................................230
    Внедрение.с.помощью.конструктора.......................................................232
    Заключение..................................................................................................233
    Ссылки.........................................................................................................233
    Глава 12. Принципы.объектно-ориентированного.проектирования.SOLID........234
    Принципы.объектно-ориентированной.разработки.SOLID............................236 1..SRP:.принцип.единственной.ответственности.....................................236 2..OCP:.принцип.открытости/закрытости................................................239 3..LSP:.принцип.подстановки.Лисков.......................................................242 4..ISP:.принцип.разделения.интерфейса.................................................245 5..DIP:.принцип.инверсии.зависимостей.................................................246
    Заключение..................................................................................................253
    Ссылки.........................................................................................................253
    Об обложке ................................................................................ 254

    Шэрон, Стейси, Стефани и Пауло

    БЛАГОДАРНОСТИ
    Как и в случае с первыми четырьмя изданиями, эта книга потребовала совмест- ных усилий многих людей. Я хотел бы поблагодарить как можно больше этих людей, поскольку без их помощи книга никогда бы не увидела свет.
    Прежде всего, хотелось бы выразить благодарность моей жене Шэрон за помощь.
    Она не только поддерживала и подбадривала меня во время длительного на- писания книги, но и выступила в роли первого редактора черновиков.
    Я также хотел бы поблагодарить маму и других членов моей семьи за их по- стоянную поддержку.
    Трудно поверить в то, что работа над первым изданием этой книги началась еще в 1998 году. На протяжении работы над всеми пятью изданиями мне было очень приятно сотрудничать с ребятами из компании Pearson. А работа с такими ре- дакторами, как Марк Тэбер (Mark Taber) и Тоня Симпсон (Tonya Simpson), принесла мне массу удовольствия.
    Выражаю особую благодарность Джону Апчерчу (Jon Upchurch) за проверку большей части приведенного в этой книге кода, а также за научное редактиро- вание рукописи. Его обширные познания в технических областях оказали не- оценимую помощь.
    И наконец, спасибо моим дочерям Стейси и Стефани, а также коту Пауло за то, что постоянно держат меня в тонусе.

    ОБ АВТОРЕ
    Мэтт Вайсфельд — профессор колледжа, разработчик программного обеспече- ния и автор. Проживает в Кливленде, штат Огайо. Прежде чем стать штатным преподавателем, Мэтт 20 лет проработал в индустрии информационных техно- логий разработчиком ПО, занимая должность адъюнкт-профессора, вел пред- принимательскую деятельность. Имеет степень магистра MBA и computer science. Помимо первых четырех изданий книги «Объектно-ориентированный подход», написал еще две книги на тему разработки программного обеспечения, а также опубликовал множество статей в таких журналах, как developer.com, Dr.
    Dobb’s Journal, The C/C++ Users Journal, Software Development Magazine, Java
    Report и международном журнале Project Management.
    Авторские права на иллюстрации
    Рисунок 8.1, скриншот Microsoft Word, © Корпорация Microsoft, 2019.
    Рисунок 8.2, скриншот документации API, © Корпорация Oracle, 1993, 2018.
    От издательства
    Ваши замечания, предложения и вопросы отправляйте по адресу электронной почты comp@piter.com
    (издательство «Питер», компьютерная редакция).
    Мы будем рады узнать ваше мнение!
    На сайте издательства http://www.piter.com вы найдете подробную информацию о наших книгах.

    ВВЕДЕНИЕ
    Как следует из названия, эта книга посвящена объектно-ориентированному подходу. Хотя выбор темы и названия книги является важным решением, оно оказывается совсем не простым, когда речь идет о концептуальной теме. Во многих книгах рассматривается тот или иной уровень программирования и объ- ектной ориентации. В отдельных популярных книгах охватываются темы, в число которых входят объектно-ориентированный анализ, объектно-ориен- тированное проектирование, шаблоны проектирования, объектно-ориентиро- ванные данные (XML), унифицированный язык моделирования Unified
    Modeling Language (UML), объектно-ориентированная веб-разработка (в том числе мобильная), различные объектно-ориентированные языки программиро- вания и многие другие темы, связанные с объектно-ориентированным програм- мированием (ООП).
    Однако при чтении таких книг многие люди забывают, что все эти темы бази- руются на одном фундаменте: важно, как вы мыслите объектно-ориентирован- ным образом. Зачастую бывает так, что многие профессионалы в области соз- дания программного обеспечения, а также студенты начинают читать эти книги, не потратив достаточно времени и усилий на то, чтобы действительно разо- браться в концепциях проектирования, кроющихся за кодом.
    Я считаю, что освоение объектно-ориентированных концепций не сводится к изучению конкретного метода разработки, языка программирования или на- бора инструментов проектирования. Работа в объектно-ориентированном стиле является образом мышления. Эта книга всецело посвящена объектно- ориентированному мышлению.
    Отделение языков программирования, методик и инструментов разработки от объектно-ориентированного мышления — нелегкая задача. Зачастую люди знакомятся с объектно-ориентированными концепциями, «ныряя» с головой в тот или иной язык программирования. Например, какое-то время назад мно- гие программисты на C впервые столкнулись с объектной ориентацией, перей- дя прямо на C++ еще до того, как они хотя бы отдаленно познакомились с объ- ектно-ориентированными концепциями.
    Важно понимать значительную разницу между изучением объектно-ориенти- рованных концепций и программированием на объектно-ориентированном языке. Я четко осознал это до того, как начал работать еще над первым издани- ем данной книги, когда прочитал статью, написанную Крейгом Ларманом (Craig

    17
    Введение. .
    Larman) What the UML Is — and Isn’t («Что такое UML и чем он не является»).
    В этой статье он пишет:
    К сожалению, в контексте разработки программного обеспечения и язы- ка UML, позволяющего создавать диаграммы, умение читать и писать
    UML-нотацию, похоже, иногда приравнивается к навыкам объектно- ориентированного анализа и проектирования. Конечно, на самом деле это не так, и последнее из упомянутого намного важнее, чем первое. Поэтому я рекомендую искать учебные курсы и материалы, в которых приобрете- нию интеллектуальных навыков в объектно-ориентированном анализе и проектировании придается первостепенное значение по сравнению с написанием UML-нотации или использованием средств автоматизиро- ванной разработки программного обеспечения.
    Таким образом, несмотря на то что изучение языка моделирования является важным шагом, намного важнее сначала приобрести объектно-ориентированные навыки. Изучение UML до того, как вы полностью разберетесь в объектно-ори- ентрованных концепциях, аналогично попытке научиться читать электрические схемы, изначально ничего не зная об электричестве.
    Та же проблема возникает с языками программирования. Как отмечалось, мно- гие программисты на С ушли в область объектной ориентации, перейдя на С ++, прежде чем соприкоснуться с объектно-ориентированными концепциями. Это всегда обнаруживается в процессе собеседования. Довольно часто разработчи- ки, которые утверждают, что они программисты на C ++, являются просто про- граммистами на C, использующими компиляторы C ++. Даже сейчас, с такими хорошо зарекомендовавшими себя языками, как C # .NET, VB .NET, Objective-C,
    Swift и Java, ключевые вопросы во время собеседования при приеме на работу могут быстро выявить сложности в понимании объектно-ориентированных концепций.
    Ранние версии Visual Basic не являются объектно-ориентированными. Язык C тоже не объектно-ориентированный, а C++ разрабатывался как обратно со- вместимый с ним. По этой причине вполне возможно использовать компиля- тор C++ при написании синтаксиса на C, но отказавшись от всех объектно-ори- ентированных свойств C++. Язык Objective-C создавался как расширение стандартного языка ANSI C. Что еще хуже, программисты могут применять ровно столько объектно-ориентированных функций, сколько нужно для того, чтобы сделать приложения непонятными для остальных программистов, как использующих, так и не использующих объектно-ориентированные языки.
    Таким образом, жизненно важно, чтобы вы, приступая к изучению того, как пользоваться средами объектно-ориентированной разработки, сначала освоили фундаментальные объектно-ориентированные концепции. Не поддавайтесь искушению сразу перейти непосредственно к языку программирования, снача- ла уделите время освоению объектно-ориентированного мышления.

    .Введение
    18
    Что нового в пятом издании
    Как часто отмечалось во введении к предыдущим изданиям, мое видение перво- го издания заключалось в том, чтобы придерживаться концепций, а не сосре- доточиваться на конкретной новейшей технологии. Несмотря на следование такому же подходу в пятом издании, я стараюсь привести больше «контраргу- ментов», чем в предыдущих четырех изданиях. Этим я даю понять, что хотя объектно-ориентированная разработка, несомненно, имеет важнейшее значение, не стоит ограничивать лишь ею свое внимание.
    Поскольку книга была впервые издана в 1999 году, за прошедшее время успели появиться многие технологии, а некоторые были вытеснены. В те времена язык
    Java только находился в начале своего становления и был главным языком в сфере объектно-ориентированного программирования. В скором времени веб-страницы уже являлись неотъемлемой частью личной и деловой жизни.
    И нам хорошо известно, насколько повсеместными стали мобильные устройства.
    За последние 20 лет разработчики программ столкнулись с XML, JSON, CSS,
    XSLT, SOAP и RESTful Web Services. В устройствах Android используется Java и, уже, Kotlin, а в iOS — Objective C и Swift.
    Хочу обратить внимание на то, что за 20 лет (и четыре издания книги) мы ох- ватили много различных технологий. В этом издании я ставлю себе основной задачей сконцентрировать весь предыдущий материал и вернуться к изначаль- ному замыслу первого издания — концепциям объектно-ориентированного программирования. Мне приятно считать, что каким бы ни был успех первого издания книги, он связан с тем, что оно было сосредоточено на самих концеп- циях. Мы, в некотором роде, прошлись по кругу, потому что настоящее издание включает в себя все технологии, которые были упомянуты.
    Наконец, концепции, которые объединяют все эти технологии в методику про- ектирования, описываются принципами SOLID. Ими пронизана каждая глава этого издания, а также две новые главы в конце.
    Пять принципов SOLID:
    ‰
    SRP — принцип единственной ответственности (Single Responsibility
    Principle).
    ‰
    OCP — принцип открытости/закрытости (Open/Close Principle).
    ‰
    LSP — принцип подстановки Барбары Лисков (Liskov Substitution Principle).
    ‰
    ISP — принцип разделения интерфейса (Interface Segregation Principle).
    ‰
    DIP — принцип инверсии зависимостей (Dependency Inversion Principle).
    В первых девяти главах я расскажу о принципах объектно-ориентированного программирования, которые считаю классическими. Последние три главы по- священы паттернам проектирования, избеганию зависимостей и понятию

    19
    Целевая.аудитория. .
    SOLID, которое построено на классических принципах и предполагает четко определенную методику.
    Целевая аудитория
    Эта книга представляет собой общее введение в фундаментальные концепции объектно-ориентированного программирования. Понятие концепции важно, по- тому что хотя весь материал темы для наглядности сопровождается кодом, глав- ная цель книги — познакомить читателя с азами объектно-ориентированного мышления. Немаловажно для программистов и понимание того, что объектно- ориентированное программирование не представляет собой какой-то отчетливой парадигмы (пускай многие в это и верят), но является лишь частью обширного инструментария для современных разработчиков программного обеспечения.
    Когда в 1995-м был подготовлен начальный материал для первого издания, объ- ектно-ориентированное программирование только появилось. Я могу так сказать потому, что, помимо немногих объектно-ориентированных языков вроде Smalltalk, настоящих языков объектно-ориентированного программирования в то время не существовало. C++, где применение объектно-ориентированных конструкций не- обязательно, был доминирующим языком программирования, основанным на C.
    Первый релиз Java 1.0 состоялся в 1996 году, а C# — в 2002-м. Собственно, когда вышло первое издание этой книги в 1999 году, никто не мог быть уверен, что объ- ектно-ориентированное программирование действительно станет ведущей пара- дигмой среди разработчиков (Java 2 вышел только в декабре 1998-года). Несмотря на доминирование в настоящее время, объектно-ориентированное программиро- вание не лишено некоторых любопытных изъянов, к которым мы еще вернемся.
    Итак, аудитория этой книги сейчас отличается от аудитории первого издания.
    С 1995 и вплоть до 2010 года я в основном обучал структурных программистов искусству объектно-ориентированного программирования. Подавляющее боль- шинство моих учеников набирали опыт на COBOL, FORTRAN, C и VB как во время учебы, так и на работе. Сегодняшние ученики, которые выпускаются из заведений, пишут видеоигры, создают сайты или мобильные приложения, прак- тически уже научились писать программы на объектно-ориентированных язы- ках. Из этого следует, что подход пятого издания значительно отличается от того, что был в первом, втором и последующих. Вместо того чтобы обучать структурных программистов разработке на объектно-ориентированных языках, сейчас нам нужно обучать поколение программистов, выросших на таких языках.
    Целевая аудитория этой книги включает проектировщиков, разработчиков, про- граммистов и менеджеров проектов, дизайнеров, проще говоря, всех желающих получить общее представление о том, что такое объектно-ориентированное про- граммирование. Я очень надеюсь на то, что прочтение этой книги создаст прочную основу для перехода к материалам, затрагивающим более продвинутые темы.

    .Введение
    1   2   3   4   5   6   7   8   9   ...   25


    написать администратору сайта