Ооп — Организация Освобождения Палестины

Эта статья представляет собой письменное изложение моего личного восприятия программирования и объектно-ориентированного программирования в частности.

Здесь можно найти и эмоциональное возмущение, и переживания за программистов всего мира.

Все, конечно, поддерживается исходным кодом.



ООП — Организация освобождения Палестины



Что такое программирование?

Как я научился программированию? — С 9 по 11 класс в школе преподавали программирование на языке Паскаль.

В чем заключались мои программы? — Из процедур и функций, данных и действий над ними.

Что тебе не понравилось? — Когда я пытался написать большую программу, я очень долго боролся с ошибками… И чем дальше я шел, тем их было больше… Мне приходилось держать в голове огромное количество информации о том, как все происходит. работает. Кто кому звонит и откуда.

Как я справился со сложностью? — Я выделил независимые модули, в которых объединил функции по их смысловому назначению.

Отдельные функции для работы с мышью, отдельно для работы с графикой, отдельно для работы с BMP и т.д.

Что такое ООП?

Как вы узнали об ООП? — На первом курсе колледжа.

Что именно они мне сказали об ООП? - Трудно запомнить.

Я помню занятия, наследование, частный , общественный И статический .

Как я использовал полученные знания? — Ну, я создал классы как отражение объектов реального мира.

Наследуется для расширения функциональности определенного класса.

Как мне помогло ООП? Стало проще писать программы? — Поначалу это было удобно.

Можно было повторно использовать старые классы.

Иногда, если требования менялись, я наследовал и менял поведение наследника по мере необходимости.

Каковы принципы SOLID? Что такое интерфейс класса и зачем его описывать явно? Каково соотношение общего/частного и части/целого? Если вы ответили утвердительно на два предыдущих вопроса, вам не нужно читать дальше.

Далее в статье мы поговорим об интерфейсах, кратко опишем принципы SOLID и представим 2 основных типа связей между объектами в объектно-ориентированной программе.



Что такое интерфейс?

Давайте посмотрим на код класса Foo:
  
  
  
  
  
   

class Foo { int a; static int b; public: Foo() { a = 0; } ~Foo() { a = 0; } int a() { return a; } static int b() { return b; } int sum1() { return a+b; } int sum2() { return a()+b(); } };

Мы видим несколько типов информации: 1. Информация о классе - поля класса: b — методы класса: b() 2. Информация об экземпляре класса — поля экземпляра класса: a — методы экземпляра класса: a(), sum1(), sum2() — конструктор экземпляра класса: Foo() — деструктор экземпляра класса: ~Foo() Итак, вот оно интерфейс класса это следующие данные: — методы экземпляра класса: a(), sum1(), sum2() Что мне следует сделать, чтобы явно описать интерфейс на C++? — У языка C++ с этим есть небольшие проблемы (синтаксис оставляет желать лучшего)

class IFoo { public: virtual ~IFoo() {} virtual int a() = 0; virtual int sum1() = 0; virtual int sum2() = 0; };

Господи, что это? — Виртуальный деструктор : ~Фу().

— Чисто виртуальные методы: a(), sum1(), sum2().

Что теперь делать с этим IFoo? — Наследовать от него классом Foo.

class Foo : public IFoo { int a; static int b; public: Foo() { a = 0; } ~Foo() { a = 0; } int a() { return a; } static b() { return b; } int sum1() { return a+b; } int sum2() { return a()+b(); } };

Теперь интерфейс класса Фу описано явно.

Сорт Фу можно назвать реализацией интерфейса IFoo .

Используйте объекты класса Фу требуется через интерфейс IFoo следующим образом:

IFoo * foo = new Foo(); int a = foo->a(); int sum1 = foo->sum1(); int sum2 = foo->sum2();

Что это нам дает? - Ну, просто посмотрите на функцию:

void process(IFoo * foo) { // .

}

Функционировать процесс можно передать любой реализация интерфейса IFoo .

Возможно Фу И СуперФу И ГиперПуперФу .

В языках C#, Java и других есть ключевое слово интерфейс, которое используется специально для описания интерфейсов:

interface IFoo { public int a(); public int sum1(); public int sum2(); };

Microsoft Visual C++ имеет ключевое слово __интерфейс , подробнее здесь .



Что такое ТВЕРДЫЙ?

«SOLID — это аббревиатура пяти основных принципов проектирования классов в объектно-ориентированном проектировании».

Википедия

С рекомендуемая розничная цена Принцип единой ответственности Принцип единого разделения ответственности
О ОКП Открытый/закрытый принцип Открытый/закрытый принцип
л ЛСП Лисков Принцип замещения Принцип замены Лискова
я Интернет-провайдер Принцип разделения интерфейсов Принцип изоляции интерфейса
Д ОКУНАТЬ Принцип инверсии зависимостей Принцип инверсии зависимостей
Постараюсь дать краткую характеристику каждому из них.

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

Если объект выполняет много разных функций, его необходимо разрезать.

Например, объект печати отчетов отвечает за формат и содержание отчетов – это неверно.

Один объект должен отвечать за формат, а другой за содержимое.

Открытый/закрытый принцип требует, чтобы классы, модули и функции были открыты для расширения, но закрыты для модификации.

Суть в том, что однажды созданные классы/функции невозможно изменить под конкретные нужды конкретного проекта.

В них разрешается только исправлять ошибки – не более того.

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

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

Пример: колеса автомобиля – часть-целое, а «колесо легкового автомобиля» относительно обобщенной сущности «колесо» – отношение всеобщее-частное.

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

Принцип инверсии зависимостей необходимо для обеспечения взаимозаменяемости объектов без изменений во всем коде и ослабления зависимостей в коде.

Если у вас есть класс A, который имеет указатель на класс B, классы считаются сильно связанными.

Чтобы заменить класс Б на любой другой, придется исправлять код класса А — что не есть хорошо.

Предлагается отображать интерфейс класса B, назовем его IB. Измените тип указателя в классе A на IB. Итак, зависимость А --> Б заменен на А --> ИБ<--B .

Теперь вы можете использовать любую другую реализацию интерфейса IB вместо B.

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

Объектно-ориентированная программа состоит из классов.

В ходе работы программы экземпляры классов создаются, взаимодействуют с другими экземплярами и прекращают свое существование.

Взаимодействуя со схожими классами, они образуют два типа иерархий: — Иерархия отношений часть/целое — Иерархия общих/частных отношений Как выглядит иерархия общих/частных отношений? — Иерархия видов наземного транспорта:

ООП — Организация освобождения Палестины

— Иерархия типов колес:

ООП — Организация освобождения Палестины

Как выглядит иерархия отношений часть/целое? — Иерархия легкового автомобиля:

ООП — Организация освобождения Палестины

При проектировании системы необходимо определить иерархии обоих типов.



Зачем это нужно, если все так работает?

ООП было создано для «уменьшения сложности программы»! При правильном использовании ваши программы могут стать чрезвычайно простыми по своей внутренней структуре.

Вам как программисту просто надо быть ленивым)) Так что вот вам способ уменьшить сложность ваших программ, снизить связность и т.д.

Рекомендуем к прочтению

  1. Чистый код. Роберт Мартин (англ.

    ОЗОН.

    ру )

  2. Рефакторинг.

    Улучшение существующего кода.

    Мартин Фаулер (англ.

    ОЗОН.

    ру )

  3. Объектно-ориентированный анализ и проектирование с примерами приложений.

    Грейди Бутч (англ.

    ОЗОН.

    ру )

  4. Методы объектно-ориентированного проектирования.

    Шаблоны проектирования.

    ?.

    Гамма, Р.

    Хелм, Р.

    Джонсон, Дж.

    Влиссидес ( ОЗОН.

    ру )

P.S. В одной из книг по программированию для J2ME, в главе про ООП, была такая фраза: «Если для вас ООП — это Организация освобождения Палестины, обратитесь к другой, более фундаментальной книге».

Сейчас я связываю эту фразу с непониманием ООП.

Теги: #программирование #ООП #интерфейс #solid #программирование

Вместе с данным постом часто просматривают: