Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Что такое ООП и для чего он нужен? [2]

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): « 1 [2]   

> Описание: Вопрос по ООП
Stierus Супермодератор
Отправлено: 11 Апреля, 2011 - 17:22:53
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




самый простой пример я увидел в учебнике по программированию на языке Jаva. там был пример с расчетом точек пересечения отрезков. задача - сделать удобное средство для простеньких математических рассчетов (для начала - вычисление точек пересечения двух отрезков).

Если смотреть с точки срения процедурного программирования - нужна 1 функця и 4 параметра к ней - координаты х и у двух точек). С точки зрения ООП - нужно описать класс точки (который характеризуется всего 2 переменными - координатами х и у, далее описываеся класс линия, так же характеризующаяся 2 свойствами - экземплярами класса точка + 1 метод ("найти пересечение с", которому передается другой экземпляр класса линия).
пока процедурный метод кажется удобнее, но тут задача расширилось - нам нужно узнать сумму расстояний от каждой предыдущей точки до точки их пересечения. При ООП подходе требуется добавить классу point 1 метод - getDistanceToPoint, в качестве аргумента, принимающую другой экземпляр класса point. - все Улыбка
Выглядеть это дубет как-то так:
PHP:
скопировать код в буфер обмена
  1. $point1 = new point(1, 10);
  2. $point2 = new Point(7, 4);
  3. $point3 = new point(0, 8);
  4. $point4 = new Point(9, 2);
  5. $line1 = new Line($point1, $point2);
  6. $line2 = new Line($point3, $point4);
  7. $crossPoint = $line1.getCrossPoint($line2);
  8. $sum =0;
  9. for($i=1; $i<5; $i++){
  10.    $name = '$line'.$i;
  11.    $sum += $crossPoint->getDistanceToPoint($$name);
  12. }


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

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

(Отредактировано автором: 11 Апреля, 2011 - 17:32:08)

 
My status
 Top
Stierus Супермодератор
Отправлено: 12 Апреля, 2011 - 12:58:07
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




Живой пример использования класса ... только сегодня появился Улыбка
 
My status
 Top
Страниц (2): « 1 [2]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB