Try using it in your preferred language.

English

  • English
  • 汉语
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 日本語
  • 한국어
  • Deutsch
  • Français
  • Italiano
  • Türkçe
  • Tiếng Việt
  • ไทย
  • Polski
  • Nederlands
  • हिन्दी
  • Magyar

Выход из системы

translation

Это сообщение переведено AI.

제이온

[Объект] Глава 1. Объекты, проектирование

  • Язык написания: Корейский
  • Базовая страна: Все страны country-flag

Выбрать язык

  • Русский
  • English
  • 汉语
  • Español
  • Bahasa Indonesia
  • Português
  • 日本語
  • 한국어
  • Deutsch
  • Français
  • Italiano
  • Türkçe
  • Tiếng Việt
  • ไทย
  • Polski
  • Nederlands
  • हिन्दी
  • Magyar

Текст, резюмированный ИИ durumis

  • В разработке программного обеспечения практика важнее теории, и на примере простой программы была рассмотрена важность объектно-ориентированного проектирования.
  • Для улучшения читаемости и изменения кода были применены принципы объектно-ориентированного проектирования, особенно подчеркивалась автономия объекта для снижения связности и повышения сплоченности.
  • Объектно-ориентированное проектирование - это метод построения системы путем сотрудничества объектов. Объекты несут ответственность за свои данные, а правильное управление зависимостями важно для написания изменяемого кода.

Введение

Роберт Л. Гласс утверждал, что практика важнее теории. Особенно в разработке программного обеспечения практика является приоритетной областью, и разработчики получают максимальную отдачу от погружения в конкретный код, работая с ним. Поэтому мы оставим в стороне теорию и концепции и рассмотрим простую программу.


Реализация приложения для продажи билетов

  • Мы хотим организовать небольшое мероприятие для продвижения камерного театра.
    • Содержание мероприятия: отправка приглашений на бесплатное посещение концерта случайным образом выбранным зрителям.
  • Необходимо разделить зрителей, выигравших в мероприятии, и тех, кто не выиграл.
    • Зрители, выигравшие в мероприятии: обмен приглашения на билет.
    • Зрители, проигравшие в мероприятии: покупка билета за деньги.



В чем проблема?

Роберт Мартин описывает три функции, которые должен выполнять программный модуль (независимо от размера, такой как класс, пакет, библиотека и т. д., представляющий собой любой элемент, составляющий программу).


  • Работает должным образом во время выполнения.
  • Существует для изменений.
    • Изменения должны быть возможны за счет простых действий.
  • Общение с человеком, читающим код.
    • Разработчик должен легко читать и понимать код.


Предыдущее приложение для продажи билетов удовлетворяет первому ограничению по правильному выполнению, но не удовлетворяет цели изменения и связи.


Код, выходящий за рамки ожиданий

Рассмотрим причину, по которой цель связи не достигнута.


  • Что делает метод enter() класса Theater
    • Камерный театр проверяет сумку зрителя на наличие приглашения.
    • Если в сумке есть приглашение, театр приказывает продавцу переместить билет из кассы в сумку зрителя.
    • Если в сумке нет приглашения, театр забирает из сумки зрителя сумму, эквивалентную стоимости билета, покупает билет и кладет его в сумку.
  • Зритель вынужден наблюдать, как посторонний человек, камерный театр, без его ведома роется в его сумке, берет деньги и кладет билет.
  • Продавец вынужден наблюдать, как посторонний человек, камерный театр, без его разрешения манипулирует билетами и деньгами в кассе.
  • Понятный код — это код, действия которого не сильно отличаются от наших ожиданий, но камерный театр выходит за рамки наших ожиданий.
    • Зритель должен сам вытащить деньги из своей сумки, заплатить продавцу и получить билет.
    • Продавец должен сам взять билет из кассы, передать его зрителю и получить от него деньги, которые нужно хранить в кассе.
  • Кроме того, для понимания метода enter() необходимо запомнить множество дополнительных деталей.
    • Audience имеет Bag.
    • В Bag находятся деньги и билет.
    • TiketSellet продает билеты в TicketOffice, и в TicketOffice хранятся деньги и билеты.


Код, уязвимый для изменений

Метод enter() предполагает два условия.

  • Зрители всегда носят с собой сумку для хранения денег и приглашений.
  • Продавец продает билеты только в кассе.


А как насчет следующих ситуаций?

  • Зритель может не иметь сумки.
  • Зритель может использовать кредитную карту, а не наличные.
  • Продавец может продавать билеты за пределами кассы.


Например, для удовлетворения первого требования необходимо удалить объект Bag класса Audience и изменить связанный с ним метод enter() класса Theater. Это связано с тем, что класс Theater слишком сильно зависит от детализированной информации о том, что зрители носят с собой сумку, а продавец продает билеты только в кассе. При изменении хотя бы одного из этих деталей необходимо изменять как этот класс, так и зависимые от него классы (например, Theater).


Это проблема, связанная с зависимостями между объектами, и зависимость предполагает влияние на изменения. Но объектно-ориентированный дизайн направлен на создание сообщества объектов, которые работают вместе, будучи взаимозависимыми, поэтому мы не должны просто удалять зависимости, а сохранять минимум зависимостей, необходимые для реализации функций приложения, и удалять ненужные зависимости.


Если между объектами слишком много зависимостей, это называется высокой степенью связности. Чем выше степень связности между двумя объектами, тем выше вероятность того, что они будут изменены вместе. Поэтому цель проектирования заключается в снижении степени связности между объектами для создания конструкции, которую легко изменить.


Улучшение конструкции

Theater не нужно знать, что зритель носит с собой сумку, а продавец продает билеты в кассе. Theater просто хочет, чтобы зритель вошел в театр. Поэтому зритель должен самостоятельно управлять деньгами и приглашениями в своей сумке, а продавец — билетами и ценой продажи в кассе, чтобы они были автономными сущностями.


Повышение автономии

Объект, который выполняет только те задачи, которые тесно связаны с ним, и делегирует не связанные задачи другим объектам, считается объектом с высокой степенью сплоченности. Создание автономных объектов, которые сами управляют своими данными, позволяет снизить степень связности и повысить степень сплоченности.


Процедурное и объектно-ориентированное программирование

  • Процедурное
    • Метод enter() класса Theater — это процесс, а Audience, TicketSeller, Bag, TicketOffice — данные.
    • Способ размещения процессов и данных в отдельных модулях называется процедурным программированием.
    • Часто встречается код, противоречащий нашей интуиции. (Например, зритель сам управляет деньгами и приглашениями.)
    • Трудно сузить влияние изменений данных.
    • Ответственность централизована. (Theater управляет всем)
  • Объектно-ориентированное
    • Способ размещения данных и процессов в одном модуле называется объектно-ориентированным программированием.
    • Можно писать код, соответствующий нашей интуиции.
    • Влияние изменений данных можно эффективно сузить за счет инкапсуляции.
    • Каждый объект сам отвечает за себя.


Можно улучшить еще больше.

  • Класс Bag класса Audience все еще является пассивной сущностью, управляемой классом Audience, поэтому класс Bag должен быть сделан автономным объектом.
  • Класс TicketOffice класса TicketSeller также управляется TicketSeller по своему усмотрению. TicketOffice должен быть сделан автономным объектом.
    • Однако после изменения появилась дополнительная связь между TicketOffice и Audience.
    • Проектирование требует тщательного взвешивания всех за и против. В этом случае, чтобы снизить степень связности с Audience, можно договориться о создании TicketOffice в качестве более или менее пассивного объекта.



Да, это ложь!

  • Несмотря на то, что в реальности объекты могут быть пассивными, в мире объектно-ориентированного программирования все становится активным и автономным.
  • Полезно использовать персонификацию, чтобы представить пассивные объекты как что-то, что улыбается, разговаривает и сердится.


Объектно-ориентированное проектирование

Почему необходимо проектирование?

  • Проектирование — это расположение кода.
  • Хороший дизайн — это дизайн, который сегодня полностью выполняет требования к функциональности и при этом легко адаптируется к изменениям завтра.


Объектно-ориентированное проектирование

  • Изменяемый код — это понятный код.
  • Объектно-ориентированная парадигма помогает нам писать код так же, как мы видим мир.
  • Объект — это автономная сущность, которая сама отвечает за свои данные.
  • Отличный объектно-ориентированный дизайн — это дизайн, который правильно управляет зависимостями между взаимодействующими объектами.


Источники

  • Объекты
제이온
제이온
제이온
제이온
[Объект] Глава 2. Объектно-ориентированное программирование В этой главе объясняется, как реализовать систему бронирования кинотеатров с использованием объектно-ориентированного программирования. Определяются объекты, такие как фильм, показ, человек, политика скидок, условия скидок и т. д., и предлагается способ р

28 апреля 2024 г.

[Эффективная Java] Элемент 6. Избегайте ненужного создания объектов Руководство по минимизации ненужного создания объектов в Java. Для неизменяемых объектов, таких как String, Boolean, рекомендуется использовать литералы, а для регулярных выражений – кэшировать экземпляры Pattern. Кроме того, автоупаковка может привести к

28 апреля 2024 г.

[Эффективный Java] Пункт 5. Используйте инъекцию зависимостей, а не явно указывайте ресурсы Если класс зависит от внешних ресурсов, не используйте синглтоны и статические утилитарные классы. Инъекция зависимостей позволяет улучшить гибкость, повторное использование и тестируемость класса, а использование паттерна фабричного метода обеспечивает б

28 апреля 2024 г.

[Для неспециалистов, выживание как разработчик] 14. Краткое изложение часто задаваемых вопросов на техническом собеседовании для начинающих разработчиков Руководство по подготовке к техническому собеседованию для начинающих разработчиков. Объясняются концепции, которые часто встречаются на собеседованиях, такие как область основной памяти, структуры данных, RDBMS и NoSQL, процедурное и объектно-ориентирова
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

3 апреля 2024 г.

Человеческие феномены, становящиеся критерием для корпоративных решений -1 Когда компании принимают решения об инвестировании для достижения нового роста, они могут сделать неправильный выбор из-за пяти человеческих предубеждений: предубеждения в пользу статус-кво, эффекта провозглашения, эффекта подтверждения, эффекта якоря, пр
Byungchae Ryan Son
Byungchae Ryan Son
Byungchae Ryan Son
Byungchae Ryan Son
Byungchae Ryan Son

7 мая 2024 г.

Человеческие явления, становятся критерием принятия решений в бизнесе -2 Представлен феноменологический подход к использованию человеческого поведения в качестве критерия принятия решений в бизнесе. Этот подход помогает понять потребности и стремления клиентов, а также обнаружить возможности для дифференцированного роста. В ча
Byungchae Ryan Son
Byungchae Ryan Son
Byungchae Ryan Son
Byungchae Ryan Son
Byungchae Ryan Son

7 мая 2024 г.

Как вам моя идея? Смысл идеи выходит за рамки простого творческого мышления, он зависит от того, какое влияние она оказывает на жизнь других людей и какое значение она несет. Используя философские взгляды Хайдеггера, мы можем переосмыслить истинную ценность и значение идеи
Byungchae Ryan Son
Byungchae Ryan Son
Byungchae Ryan Son
Byungchae Ryan Son
Byungchae Ryan Son

7 мая 2024 г.

Концептуальное моделирование данных Концептуальное моделирование данных - это процесс разделения сущностей и представления отношений между ними в виде ERD. Сущность - это независимая единица информации, а атрибут - это данные, которыми обладает сущность. Идентификатор однозначно идентифицир
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

8 апреля 2024 г.

Перезагрузка отношений 2 и организационная культура: сила наблюдения -2 Вместо того, чтобы полагаться на внешних консультантов для улучшения организационной культуры, следует анализировать и искать изменения путем наблюдения за «внутренними» факторами, такими как взаимодействие сотрудников, планировка помещений, символика. По
Byungchae Ryan Son
Byungchae Ryan Son
Byungchae Ryan Son
Byungchae Ryan Son
Byungchae Ryan Son

9 мая 2024 г.