Основы ООП - Notes of a Developer
Notes of a Developer [http://www.developers-life.com] Develop on Objective-C, UIKit, C, OpenGL for iPhone, iPad, Mac OS X Home About Me About Alex Subscribe RSS Основы ООП Categories: OOP , others , PHP on Sep.14, 2008 Автор статьи не я. Мне очень понравилась тематика. Данную информацию полезно знать 100% всем PHP программистам, а предисловие всем программистам. Спасибо автору! Статья взята с PHP.SU! Объектно-ориентированные программы более просты и мобильны, их легче модифицировать и сопровождать, чем их “традиционных” собратьев. Кроме того, похоже, сама идея объектной ориентированности при грамотном ее использовании позволяет программе быть даже более защищенной от различного рода ошибок, чем это задумывал программист в момент работы над ней. Однако ничего не дается даром: сами идеи ООП довольно трудны для восприятия “с нуля”, поэтому до сих пор очень большое количество программ (различные системы Unix, Apache, Perl, да и сам PHP) все еще пишутся на старом добром “объектно-неориентированном” Си. PHP до недавнего времени обеспечивал лишь некоторую поддержку ООП. Однако, после выхода PHP5 поддержка ООП в PHP стала практически полной. Стратегию ООП лучше всего описать как смещение приоритетов в процессе программирования от функциональности приложения к структурам данных. Это позволяет программисту моделировать в создаваемых приложениях реальные объекты и ситуации. Технология ООП обладает тремя главными преимуществами: * она проста для понимания: ООП позволяет мыслить категориями повседневных объектов; * повышенно надежна и проста для сопровождения — правильное проектирование обеспечивает простоту расширения и модификации объектно-ориентированных программ. Модульная структура позволяет вносить независимые изменения в разные части программы, сводя к минимуму риск ошибок программирования; * ускоряет цикл разработки — модульность и здесь играет важную роль, поскольку различные компоненты объектно-ориентированных программ можно легко использовать в других программах, что уменьшает избыточность кода и снижает риск внесения ошибок при копировании. Специфика ООП заметно повышает эффективность труда программистов и позволяет им создавать более мощные, масштабируемые и эффективные приложения. Объектно-ориентированное программирование основано на: * Инкапсуляции; * Полиморфизме; * Наследовании. Инкапсуляция Инкапсуляция – это механизм, объединяющий данные и обрабатывающий их код как единое целое. Многие преимущества ООП обусловлены одним из его фундаментальных принципов — инкапсуляцией. Инкапсуляцией называется включение различных мелких элементов в более крупный объект, в результате чего программист работает непосредственно с этим объектом. Это приводит к упрощению программы, поскольку из нее исключаются второстепенные детали. Инкапсуляцию можно сравнить с работой автомобиля с точки зрения типичного водителя. Многие водители не разбираются в подробностях внутреннего устройства машины, но при этом управляют ею именно так, как было задумано. Пусть они не знают, как устроен двигатель, тормоз или рулевое управление, — существует специальный интерфейс, который автоматизирует и упрощает эти сложные операции. Сказанное также относится к инкапсуляции и ООП — многие подробности “внутреннего устройства” скрываются от пользователя, что позволяет ему сосредоточиться на решении конкретных задач. В ООП эта возможность обеспечивается классами, объектами и различными средствами выражения иерархических связей между ними. Полиморфизм Полиморфизм позволяет использовать одни и те же имена для похожих, но технически разных задач. Главным в полиморфизме является то, что он позволяет манипулировать объектами путем создания стандартных интерфейсов для схожих действий. Полиморфизм значительно облегчает написание сложных программ. Наследование Наследование позволяет одному объекту приобретать свойства другого объекта, не путайте с копированием объектов. При копировании создается точная копия объекта, а при наследовании точная копия дополняется уникальными свойствами, которые характерны только для производного объекта. Классы и объекты в PHP Класс – это базовое понятие в объектно-ориентированном программировании (ООП). Если сказать проще, то класс – это своеобразный тип переменной. Экземпляр класса – это объект. Объект – это совокупность данных (свойств) и функций (методов) для их обработки. Данные и методы называются членами класса. Вообще, объектом является все то, что поддерживает инкапсуляцию. Внутри объекта данные и код (члены класса) могут быть либо открыты, либо нет. Открытые данные и члены класса являются доступными для других частей программы, которые не являются частью объекта. А вот закрытые данные и члены класса доступны только внутри этого объекта. Описание классов в PHP начинаются служебным словом class: class Имя_класса { // описание членов класса – данных и методов для их обработки } Для объявления объекта необходимо использовать оператор new: Объект = new Имя_класса; Данные описываются с помощью служебного слова var. Метод описывается так же, как и обыкновенная функция. Методу также можно передавать параметры. Пример класса на PHP: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 John" ; } } // Создаем объект класса Coor: $object = new Coor ; ?> Доступ к класам и объектам в PHP Мы рассмотрели, каким образом описываются классы и создаются объекты. Теперь нам необходимо получить доступ к членам класса, для этого в PHP предназначен оператор ->. Приведем пример: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 John" ; } } // Создаем объект класса Coor: $object = new Coor ; // Получаем доступ к членам класса: $object -> name = "Alex" ; echo $object -> name ; // Выводит 'Alex' // А теперь получим доступ к методу класса (фактически, к функции внутри класса): $object -> Getname ( ) ; // Выводит 'John' заглавными буквами ?> Чтобы получить доступ к членам класса внутри класса, необходимо использовать указатель $this, которы всегда относится к текущему объекту. Модифицированный метод Getname(): 1 2 3 function Getname ( ) { echo $this -> name ; } Таким же образом, можно написать метод Setname(): 1 2 3 function Setname ( $name ) { $this -> name = $name ; } Теперь для изменения имени можно использовать метод Setname(): 1 2 $object -> Setname ( "Peter" ) ; $object -> Getname ( ) ; А вот и полный листинг кода: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 name ; } function Setname ( $name ) { $this -> name = $name ; } } // Создаем объект класса Coor: $object = new Coor ; // Теперь для изменения имени используем метод Setname(): $object -> Setname ( "Nick" ) ; // А для доступа, как и прежде, Getname(): $object -> Getname ( ) ; // Сценарий выводит 'Nick' ?> Указатель $this можно также использовать для доступа к методам, а не только для доступа к данным: 1 2 3 4 function Setname ( $name ) { $this -> name = $name ; $this -> Getname ( ) ; } Инициализация объектов Иногда возникает необходимость выполнить инициализацию объекта – присвоить его свойствам первоначальные значения. Предположим, имя класса Coor и он содержит два свойства:имя человека и город его проживания. Можно написать метод (функцию), который будет выполнять инициализацию объекта, например Init(): 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 name = $name ; $this -> city = "London" ; } } // Создаем объект класса Coor: $object = new Coor ; // Для инициализации объекта сразу вызываем метод: $object -> Init ( ) ; ?> Главное не забыть вызвать функцию сразу после создания объекта, либо вызвать какой-нибудь метод между созданием (оператор new) объекта и его инициализацией (вызовом Init). Для того, чтобы PHP знал, что определенный метод нужно вызывать автоматически при создании объекта, ему нужно дать имя такое же, как и у класса (Coor): 1 2 3 4 function Coor ( $name ) $this -> name = $name ; $this -> city = "London" ; } Метод, инициализирующий объект, называется конструктором. Однако, PHP не имеет деструкторов, поскольку ресурсы освобождаюся автоматически при завершении работы скриптов. Наследование и полиморфизм классов в PHP Наследование классов в PHP Наследование – это не просто создание точной копии класса, а расширение уже существующего класса, чтобы потомок мог выполнять какие-нибудь новые, характерные только ему функции. Рассмотрим конкретный пример на PHP: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Это родительская функция" ; } function test ( ) { echo "
Это родительский класс
" ; } } class Child extends Parent { function child_funct ( ) { echo "
Это дочерняя функция
" ; } function test ( ) { echo "
Это дочерний класс
" ; } } $object = new Parent ; $object = new Child ; $object -> parent_funct ( ) ; // Выводит 'Это родительская функция' $object -> child_funct ( ) ; // Выводит 'Это дочерняя функция' $object -> test ( ) ; // Выводит 'Это дочерний класс' ?> Ключевое слово extends (см. пример) говорит о том, что дочерний класс Child наследует все методы и свойства класса Parent. Родительский класс обычно называют базовым классом или суперклассом, а дочерний класс Child – производным или подклассом. Полиморфизм классов в PHP Полиморфизм – это свойства базового класса использовать функции производных классов. Практический пример, показывающий свойство класса – полиморфизм: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 Функция базового класса" ; } function base_funct ( ) { $this -> funct ( ) ; } } class Derivative extends Base { function funct ( ) { echo "
Функция производного класса
" ; } } $b = new Base ( ) ; $d = new Derivative ( ) ; $b -> base_funct ( ) ; $d -> funct ( ) ; $d -> base_funct ( ) ; // Скрипт выводит: // Функция базового класса // Функция производного класса // Функция производного класса ?> В рассмотренном примере функция base_funct() класса Base была перезаписана одноименной функцией класса Derivative. Функция, переопределенная таким образом, называется виртуальной. Similar posts: SIO2 answers on questions from forum sio2 Simple XML Parser based on NSXMLParser +converter Add methods to obejct at runtime in Objective-C Курс валют на iPhone (parse XML Files) iPhone Test Leaks Tags: OOP , PHP , Кодинг ( 4 votes, average: 3.50 out of 5) Loading ... Оставить отзыв Name (required) Mail (will not be published) (required) Website You need to enable javascript in order to use Simple CAPTCHA. Security Code: Feedburn & Twitter Google Search on Site Custom Search Blog of www.mob1serv.com Red / blue!!! Funny video (iPhone app using mob1serv) Updates planned soon Mob1serv participates in Geek’n'Rolla 2010 in London Highest rated files (iPhone Samples code) OpenGL GIF Player Apple iPhone samples code Rewrite UITabBar UICatalog all UI of iPhone Latest Posts NSRegularExpression sample for comment syntax highlighting Simple EKDemo – EKEvent DDProgressView – Custom Progress View My Custom UITextView with syntax highlighting Color Picker for iOS Sorting by block Getting Font Metrics Tweeting – example of Apple “Geo” renamed to “Photo Info Editor” Get Geo tags from image Tags AJAX Android Apple Blender Book Chrome FireFox Google iOS iPad iPhone Jailbreak Javascript jQuery life Linux Mac Mac OS X Mob1serv objective-c OOP OpenGL OS OS X PHP Private Python QA RegExp SIO2 SVN Texture Trac UI UIFont UIImage UIKit UITabBar UIWebView Ukraine Wordpress work Xcode XML Кодинг Ads from Google for hosting ;) Categories Android Apple iPad iPhone Mac OS X FireFox Google Javascript jQuery Linux Mob1serv Money OOP others PHP Wordpress Python Trac Tutorials For users Log in Blogs of friends :) mob1serv: universal web service for iPhone / Android Injoit: iPhone / Android development, London, UK SoftWare For Mac OS X Дао человека с кошкой Taras Filatov Alex Bulgakov Archive November 2011 October 2011 August 2011 July 2011 April 2011 February 2011 January 2011 November 2010 October 2010 September 2010 June 2010 May 2010 April 2010 March 2010 February 2010 January 2010 December 2009 November 2009 October 2009 September 2009 August 2009 July 2009 June 2009 May 2009 April 2009 March 2009 February 2009 January 2009 December 2008 November 2008 October 2008 September 2008 April 2008 Ads Заработать Donate Z286920228019 U225679933128 R153748891142 money for , i have 0,1 % Ads from Google Powered by SAKrisT