Ужасный юбилей. А кому из футболистов в картах не было равных

Эта статья является изложением в письменном виде моего личного восприятия программирования и Объектно-ориентированного программирования в частности. Здесь собраны и душевные негодования, и переживания за программистов всего мира. Всё, конечно же, подкреплено исходным кодом.

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

Откуда я узнал о программировании?
- С 9 по 11 класс в школе учили программировать на Паскале.

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

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

Как я боролся со сложностью?
- Выделял независимые модули в которых объединял функции по их смысловому предназначению. Отдельно функции для работы с мышкой, отдельно для работы с графикой, отдельно для работы с BMP и т.д.

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

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

Что именно мне рассказывали про ООП?
- Трудно вспомнить. Помню классы, наследование, private , public и static .

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

Чем мне помогло ООП, стало ли проще писать программы?
- На первых порах было удобно. Можно было повторно использовать старые классы. Иногда, если требования менялись - я наследовался и изменял в наследнике поведение необходимым образом.

Что из себя представляют принципы 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

- конструктор экземпляра класса: Foo()
- деструктор экземпляра класса: ~Foo()

Так вот интерфейсом класса являются следующие данные:
- методы экземпляра класса: a(), sum1(), sum2()

Что сделать чтобы описать в явном виде интерфейс на C++?
- У языка C++ с этим небольшие проблемы (синтаксис оставляет желать лучшего)

Class IFoo { public: virtual ~IFoo() {} virtual int a() = 0; virtual int sum1() = 0; virtual int sum2() = 0; };
Господи, да что же это такое?
- Виртуальный деструктор : ~Foo().
- Чисто виртуальные методы: 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(); } };
Теперь интерфейс класса Foo описан явным образом. Класс Foo можно назвать реализацией (имплементом) интерфейса IFoo . Использовать объекты класса Foo необходимо через интерфейс IFoo следующим образом:

IFoo * foo = new Foo(); int a = foo->a(); int sum1 = foo->sum1(); int sum2 = foo->sum2();
Что это нам даёт?
- Ну просто посмотрим на функцию:

Void process(IFoo * foo) { // ... }
В функцию process можно передать любую реализацию интерфейса IFoo . Это может быть и Foo и SuperFoo и GiperPuperFoo .

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

Interface IFoo { public int a(); public int sum1(); public int sum2(); };
В Microsoft Visual C++ имеется ключевое слово __interface , подробнее .

Что же такое SOLID?

«SOLID это аббревиатура пяти основных принципов дизайна классов в объектно-ориентированном проектировании.» Wikipedia
S SRP Single responsibility principle
O OCP Open/closed principle
L LSP Liskov Substitution Principle Принцип подстановки Лисков
I ISP Interface segregation principle Принцип изоляции интерфейса
D DIP Dependency Inversion Principle
Я попытаюсь дать краткую характеристику каждому из них.

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

Принцип открытости/закрытости требует, чтобы классы, модули, функции были открыты для расширения, но закрыты для изменения. Суть в том, что единожды созданные классы/функции нельзя изменять под конкретные нужды конкретного проекта. Допускается лишь исправлять в них ошибки - не более того. Для изменения поведения некоторого класса/функции необходимо явным образом описать его интерфейс и создать другую реализацию этого интерфейса.

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

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

Принцип инверсии зависимостей необходим для обеспечения заменяемости объектов без правок по всему коду и для ослабления зависимостей в коде. Когда у вас есть класс A, имеющий указатель на класс B - классы считаются сильно связанными. Для замены класса B на любой другой, придётся исправлять код класса A - что не есть хорошо. Предлагается вывести интерфейс класса B, назовем его IB. Изменить тип указателя в классе A на IB. Таким образом зависимость A-->B заменилась на A-->IB<--B . Теперь можно вместо B использовать любую другую реализацию интерфейса IB.

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

Объектно-ориентированная программа состоит из классов. В процессе работы программы создаются экземпляры классов, взаимодействуют с другими экземплярами и завершают своё существование. Взаимодействуя с себе-подобными классы образуют два типа иерархий:
- Иерархия отношения часть/целое
- Иерархия отношений общее/частное

Как выглядит иерархия отношений общее/частное?

Иерархия видов наземного транспорта.

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

(Munazzamat At–Tahrir Filastiniyah) – ООП. Создана в 1964 на совещании арабских лидеров, чтобы представлять интересы 2–х млн. палестинских арабов, изгнанных со своих земель. При создании ООП возглавил Ахмад Шукейри, руководство осуществляется Национальным советом Палестины. Первоначально ООП строилась по географическому принципу, с 1968 в организации представлены различные партизанские движения. ООП ставила целью ликвидацию Государства Израиль, изгнание из Палестины большинства еврейских переселенцев и создание «демократического и светского государства». Средство достижения целей – вооруженная борьба с Израилем, осуществляющаяся рейдами партизан. Главные группы: Движение национального освобождения Палестины, Народный фронт освобождения Палестины, аль–Сайка (Авангард народно–освободительной войны), Фронт народной борьбы, Демократический фронт освобождения Палестины. Под руководством ООП действовали террористические группы «Черный сентябрь» и НФОП–ГК. Фракции ООП отличались идеологически и тактикой, некоторые открыто признавали тактику терроризма. Умеренные фракции ООП высказывались за переговоры с еврейскими поселенцами и включение их поселений в состав Палестинского государства; радикалы высказывались за насильственное уничтожение Израиля и создание светского государства с равными правами для всех верующих. Деятельность ООП финансировалась союзными арабскими режимами и частными пожертвованиями палестинцев. В 1969 организацию возглавил лидер ФАТХ (крупнейшая фракция ООП) Ясир Арафат. Главные базы партизанских формирований ООП, откуда проводились вооруженные операции против Израиля, находились в Иордании, В 1970–71 король Иордании Хусейн провел армейскую операцию против ООП; после чего организация перенесла штаб–квартиру и боевые отряды в Ливан. НФОП и другие группировки сотрудничали с европейскими ультралевыми и ультраправыми (найдя общий язык на основе антисемитизма) террористическими группировками, главным образом Италии, Австрии, Германии, стремясь создать террористическую сеть, охватывающую Европу и Средиземноморье. В 1972 террористы группы «Черный сентябрь», филиала ФАТХ, созданного для совершения акций международного терроризма, убили 9 израильских спортсменов на Олимпиаде в Мюнхене. В 1974 ООП приняла решение перейти от исключительно террористических методов действия к стратегии, включающей политические мероприятия, что стало причиной раскола в рядах Палестинского движения сопротивления и образования «Фронта отказа». В 1974 ООП признана арабскими странами и ООН в качестве единственного законного представителя палестинского народа, Арафат выступил на Генеральной Ассамблее ООН. Продолжающиеся атаки ООП с территорий Ливана, оккупированных Сирией, заставили Израиль осуществить вторжение в Ливан в 1982. Бейрут, где находилась штаб–квартира ООП, был окружен, большинство палестинцев выехали в дружественные арабские страны. Арафат обосновался в Тунисе, откуда осуществлял руководство организацией и борьбу с просирийски настроенными членами ООП. Израильскими бомбардировщиками 1.10.1985 была атакована и разрушена штаб–квартира ООП в Тунисе. В дек. 1987 по призыву Арафата начинается Интифада в секторе Газы – невооруженное восстание арабов. Интифада приняла формы бойкота товаров Израиля, атаки израильских поселенцев, демонстрации и т. п. На совещании Национального совета Палестины, проходившего в Алжире в 1988, были признаны резолюции ООН 242 и 338, призывавшие Израиль очистить занятые территории. Вскоре Арафат объявил о признании права Израиля на существование и отказался от ведения террористической деятельности, что позволило начать мирный процесс. 15.11.1988 ООП провозгласила создание Государства Палестина, 2.4.1989 Национальный совет Палестины избрал Арафата его президентом. В 1993 Арафат и руководители Израиля ведут переговоры, которые закончились признанием Израилем ООП и договором на дальнейшее развитие сотрудничества, что позволило в 1996–97 осуществить реальные действия по созданию Временной палестинской автономии.

ООП - создана в 1 964 г. Объединяет большинство организаций Палестинского движения сопротивления и общественных палестинских организаций. Высший орган - Национальный совет Палестины.

Отличное определение

Неполное определение ↓

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

(Munazzamat At–Tahrir Filastiniyah) – ООП. Создана в 1964 на совещании арабских лидеров, чтобы представлять интересы 2–х млн. палестинских арабов, изгнанных со своих земель. При создании ООП возглавил Ахмад Шукейри, руководство осуществляется Национальным советом Палестины. Первоначально ООП строилась по географическому принципу, с 1968 в организации представлены различные партизанские движения. ООП ставила целью ликвидацию Государства Израиль, изгнание из Палестины большинства еврейских переселенцев и создание «демократического и светского государства». Средство достижения целей – вооруженная борьба с Израилем, осуществляющаяся рейдами партизан. Главные группы: Движение национального освобождения Палестины, Народный фронт освобождения Палестины, аль–Сайка (Авангард народно–освободительной войны), Фронт народной борьбы, Демократический фронт освобождения Палестины. Под руководством ООП действовали террористические группы «Черный сентябрь» и НФОП–ГК. Фракции ООП отличались идеологически и тактикой, некоторые открыто признавали тактику терроризма. Умеренные фракции ООП высказывались за переговоры с еврейскими поселенцами и включение их поселений в состав Палестинского государства; радикалы высказывались за насильственное уничтожение Израиля и создание светского государства с равными правами для всех верующих. Деятельность ООП финансировалась союзными арабскими режимами и частными пожертвованиями палестинцев. В 1969 организацию возглавил лидер ФАТХ (крупнейшая фракция ООП) Ясир Арафат. Главные базы партизанских формирований ООП, откуда проводились вооруженные операции против Израиля, находились в Иордании, В 1970–71 король Иордании Хусейн провел армейскую операцию против ООП; после чего организация перенесла штаб–квартиру и боевые отряды в Ливан. НФОП и другие группировки сотрудничали с европейскими ультралевыми и ультраправыми (найдя общий язык на основе антисемитизма) террористическими группировками, главным образом Италии, Австрии, Германии, стремясь создать террористическую сеть, охватывающую Европу и Средиземноморье. В 1972 террористы группы «Черный сентябрь», филиала ФАТХ, созданного для совершения акций международного терроризма, убили 9 израильских спортсменов на Олимпиаде в Мюнхене. В 1974 ООП приняла решение перейти от исключительно террористических методов действия к стратегии, включающей политические мероприятия, что стало причиной раскола в рядах Палестинского движения сопротивления и образования «Фронта отказа». В 1974 ООП признана арабскими странами и ООН в качестве единственного законного представителя палестинского народа, Арафат выступил на Генеральной Ассамблее ООН. Продолжающиеся атаки ООП с территорий Ливана, оккупированных Сирией, заставили Израиль осуществить вторжение в Ливан в 1982. Бейрут, где находилась штаб–квартира ООП, был окружен, большинство палестинцев выехали в дружественные арабские страны. Арафат обосновался в Тунисе, откуда осуществлял руководство организацией и борьбу с просирийски настроенными членами ООП. Израильскими бомбардировщиками 1.10.1985 была атакована и разрушена штаб–квартира ООП в Тунисе. В дек. 1987 по призыву Арафата начинается Интифада в секторе Газы – невооруженное восстание арабов. Интифада приняла формы бойкота товаров Израиля, атаки израильских поселенцев, демонстрации и т. п. На совещании Национального совета Палестины, проходившего в Алжире в 1988, были признаны резолюции ООН 242 и 338, призывавшие Израиль очистить занятые территории. Вскоре Арафат объявил о признании права Израиля на существование и отказался от ведения террористической деятельности, что позволило начать мирный процесс. 15.11.1988 ООП провозгласила создание Государства Палестина, 2.4.1989 Национальный совет Палестины избрал Арафата его президентом. В 1993 Арафат и руководители Израиля ведут переговоры, которые закончились признанием Израилем ООП и договором на дальнейшее развитие сотрудничества, что позволило в 1996–97 осуществить реальные действия по созданию Временной палестинской автономии.



  • Разделы сайта