Четверг, 16.05.2024, 15:48
DigitalBox
Приветствую Вас Гость | RSS
Главная Введение в ООП Регистрация Вход
Меню сайта

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



С самого начала РНР рассматривался как простой язык написания сценариев. Позже, начиная с версии 4, в нем появились объектно-ориентированные свойства. После появления версии 5 возможности объектно-ориентированного программирования на языке РНР были существенно расширены, а кроме того, повысилось быстродействие разрабатываемых программ. Однако большинство из новых свойств остаются невидимыми. Эти изменения в основном касаются ядра Zend 2, которое в РНР 5 стало гораздо эффективнее по сравнению с ядром РНР 4. Кроме повышения скорости обработки сценариев, в РНР 5 были добавлены новые возможности, которые сделали этот язык программирования по-настоящему объектно-ориентированным.

Объектно-ориентированный подход к программированию предполагает использование объектов и классов. Более подробно они рассматриваются в этом разделе ниже. В настоящее время объектно-ориентированный подход широко распространен, и многие университетские курсы по программированию начинаются именно с его изучения. При объектно-ориентированном программировании чаще всего используются языки программирования Java и C++.

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

В объектно-ориентированном программировании основными элементами программы являются объекты (object). Они являются представлением реальных объектов, которые задействованы при решении реальной проблемы. Например, если приложение относится к предметной области продажи подержанных автомобилей, то, возможно, в качестве объектов будут выбраны автомобили и покупатели. Если же решаемая задача связана с космосом, то объекты будут представлять звезды и планеты.

Объектно-ориентированное программирование является новой концепцией, которая предоставляет новую терминологию для описания рассматриваемых проблем. Понимание этой терминологии — ключ к пониманию самого объектно-ориентированного подхода.


Объекты и классы

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

В общем случае объекты соответствуют именам существительным. Человек является объектом, так же как и животные, дома, офисы, покупатели, мусорные баки, пальто, облака, планеты и кнопки. Однако объекты — это не просто физические объекты. Как и имена существительные, зачастую объекты являются более концептуальными. Например, банковский счет невозможно подержать в руках, но он тем не менее является объектом. То же самое можно сказать и про компьютерную учетную запись, залог, файл, базу данных, заказы, сообщения электронной почты, адреса, песни, телевизионные шоу, встречи, даты и т.д.

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

Разработчик, занимающийся созданием класса, знает все о его внутреннем устройстве. Однако для тех, кто будет использовать этот класс, подобная информация вовсе необязательна. Например, необязательно знать, как функционирует телефон, — позвонить можно и без этой информации. Специалисту, сконструировавшему телефон, известно о его внутренней архитектуре. Поэтому при появлении новых технологий он сможет вскрыть телефонный аппарат и усовершенствовать его. Вместе с тем, до тех пор, пока не изменится внешний интерфейс (клавишная панель и кнопки) телефона, на его использование ничто не повлияет.


Свойства

Объекты имеют свойства (property), также называемые атрибутами (attribute). Автомобиль может быть красным, зеленым или быть покрашенным в горошек. Такие свойства автомобиля, как цвет, размер или модель, являются внутренними характеристиками объекта. Обычно свойства класса задаются в виде переменных. Например, атрибут цвета может храниться в объекте в виде переменной с отличительным именем, например $color. Тогда в объекте "автомобиль" может содержаться переменная $color со значением красный ($color = красный).

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


Методы

Действия, которые могут выполнять объекты, иногда рассматриваются как его обязанности (responsibility). Например, объект "автомобиль" может перемещаться вперед и назад, останавливаться и парковаться. Каждое действие (обязанность), которое объект может выполнять, реализуется в классе в виде метода (method).

В языке PHP метод имеет тот же синтаксис, что и функция. Разница заключается в том, что методы находятся внутри класса. Они не могут быть вызваны независимо от класса — интерпретатор РНР не позволит сделать это. Функции такого вида могут использоваться только в контексте объекта.

Как правило, при создании методов им присваивают имена, соответствующие выпоняемым действиям, например parkCar() или getColor(). Методы могут иметь любые допустимые имена, однако в соответствии с общепринятыми соглашениями в их именах используются прописные символы.

Методы представляют собой интерфейс между объектом и остальным миром. Каждому действию (обязанности) объекта должен соответствовать свой метод. С объектом можно взаимодействовать лишь через его интерфейс. Например, если ваш сосед хочет одолжить у вас немного сахара, ему следует сначала постучать в вашу дверь и попросить об этой услуге. Вряд ли вы будете довольны, если сосед залезет в вашу кухню через окно и возьмет его сам. Чтобы этого не случилось, ваш дом (house) (как объект) должен иметь входную дверь (front door). И только через нее сосед (neighbor) будет иметь возможность попасть в дом. Другими словами, в объекте house должен содержаться метод открытьВходнуюДверь (openFrontDoor), который и необходимо использовать соседу. При этом другие варианты проникновения в дом должны отсутствовать. Открытие входной двери front door (действие объекта house) должно осуществляться с помощью метода openDoor(). При создании объектов не оставляйте в них "открытых окон".

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


Наследование

Объекты должны содержать только необходимые свойства и методы. Одним из подходов для разделения свойств и методов между классами является наследование (inheritance). Пусть, например, имеются два объекта, один из которых соответствует розам белого цвета, а другой—красного. Можно создать два класса: redRose (красная роза) и whiteRose (белая роза). Однако большая часть информации будет одинаковой для обоих классов, поскольку оба вида роз относятся к кустарникам, имеют колючки и цветут в июне. Наследование позволяет избежать дублирования информации.

Сначала можно создать один класс Rose. Он может содержать общую информацию для роз, такую как $plant = bush (вид растения — кустарник), $stem = thorns (стебель—с колючками), $blooms = June (цветет в июне). Затем можно создать два подкласса для соответствующих видов роз. Тогда класс Rose будет являться главным классом (master chss), или родительским классом (parent class). В свою очередь, классы redRose и whiteRose называются подклассами (subclass), или наследниками (child class), или потомками (child).

Классы-потомки наследуют все атрибуты и методы родительского класса. Однако они могут иметь и свои собственные свойства, например белый цвет ($color = белый) для класса whiteRose и красный цвет ($color = красный) — для класса redRose.

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


Что отсутствует в объектно-ориентированной парадигме РНР 5

Если вы знакомы с объектно-ориентированным программированием на других языках, то, возможно, обнаружите, что некоторые из его характерных свойств в языке РНР отсутствуют. Однако жизнь не стоит на месте, и многие возможности, которых не было в РНР 4, были добавлены в РНР 5. Однако по-прежнему отсутствуют следующие механизмы:

  • Полиморфизм (polymorphism). В сценарии РНР в одном классе не может быть двух методов с одинаковыми именами, даже конструкторов. Другими словами, в РНР нельзя реализовать полиморфизм. В одном классе невозможно иметь два метода с одним и тем же именем, но с разным набором параметров (сигнатурами). Для реализации полиморфизма программисты иногда используют операторы switch и другие механизмы.
  • Множественное наследование (multiple inheritance). В языке РНР отсутствует механизм множественного наследования. Класс может быть наследником только одного родительского класса.

Разработка объектно-ориентированных программ

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


Выбор объектов

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

Один из возможных подходов к идентификации объектов заключается в следующем. Сначала сформируйте перечень всех возможных объектов (т.е. имен существительных) из предметной области. Для этого разработчики иногда могут воспользоваться проектной документацией.

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


Выбор свойств и методов для каждого объекта

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

Объекты должны быть независимыми, для каждого из них необходимо определить обязанности и методы, которые они будут выполнять. В качестве примера рассмотрим объект "банковский счет". Сначала его нужно создать (т.е. открыть). Для этого подойдет метод openBankAccount(). После этого с банковским счетом можно осуществлять различные операции: класть деньги на счет, оплачивать счета, следить за балансом счета и выдгиать о нем различную информацию.

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


Создание и использование класса

После выявления объектов и их свойств можно приступать к их созданию и истолкованию. Для создания и использования объекта нужно выполнить следующие действия:

  1. Использовать ключевое слово class. Ключевое слово class является основным при создании класса. С ним связывается блок инструкций со свойствами и методами класса.
  2. Вставить выражение class в те места, где необходимо использовать соответствующий объект. Класс можно разместить в самом сценарии. Однако чаще всего конструкцию class размещают в отдельном файле, который включается в сценарий с помощью директивы include.
  3. Создать объект в сценарии. На основе описания класса можно создавать объекты, т.е. выполнять инстанцирование (instantiation).
  4. Использовать объект. После создания нового объекта можно приступать к его использованию. При этом можно использовать любые методы класса, определенные в соответствующем блоке при его описании.

Оставшаяся часть этого раздела будет посвящена более подробному описанию каждого из этих этапов.

Форма входа

Мини-чат

Календарь новостей
«  Май 2024  »
ПнВтСрЧтПтСбВс
  12345
6789101112
13141516171819
20212223242526
2728293031

Поиск

Друзья сайта
Скажи сайту спасибо
ЯндексЯндекс. ДеньгиХочу такую же кнопку



Получить WMR-бонус на свой кошелек!

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Copyright MyCorp © 2024 Бесплатный конструктор сайтов - uCoz