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 :: Что такое ООП и для чего он нужен?

 PHP.SU

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


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

> Описание: Вопрос по ООП
vanicon
Отправлено: 10 Апреля, 2011 - 13:58:54
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 808
Дата рег-ции: Янв. 2010  
Откуда: Самара


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




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


-----
Так было, так есть и так будет
 
 Top
Champion Супермодератор
Отправлено: 10 Апреля, 2011 - 14:24:39
Post Id



Активный участник


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


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




vanicon пишет:
при хорошем ООП программирование приложение работает быстрее
Нет, это вряд ли. Просто при хорошем программировании приложение быстрее и гибче. ООП тут ни при чем.

ООП - просто способ мышления. Вы рассматриваете проблему как совокупность взаимодействующих объектов.
Допустим надо написать прогу, в которой выхухоль бросает мячик. Будет 2 объекта: выхухоль и мячик. У них будет грубо говоря 3-5 свойств, 3-5 публичных методов. Этими объектами будет очень просто пользоваться, потому что вся сложность и расчеты скрыты в 20 приватных методах. Пользователю класса это не надо знать и вы это подчеркиваете при помощи ООП. И сами знаете, что если вы захотели изменить какой-то приватный метод, что он никем нигде не используется, кроме как методами этого же класса.
Вот самая главная штука ООП. Это инкапсуляция.

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

Полиморфизьм - тоже хорошая штука, которая как раз проявляется при наследовании при использовании переопределенных методов дочерних классов, например.
 
 Top
Toxa
Отправлено: 10 Апреля, 2011 - 15:00:53
Post Id



Посетитель


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


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

[+]


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


-----
Удобный сервис для хранения файлов
 
 Top
OrmaJever Модератор
Отправлено: 10 Апреля, 2011 - 15:25:12
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




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


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Haron
Отправлено: 10 Апреля, 2011 - 22:55:24
Post Id



Частый гость


Покинул форум
Сообщений всего: 197
Дата рег-ции: Июнь 2010  
Откуда: Оттуда


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




Чтобы понять сам принцип и идею ООП - мне помогли небольшие упражнения:

Например описать программно "Стаканы" (т.е. создать класс стакана, определить его свойства и методы). Естественно, что вызов класса - должен возвращать определённый стакан. Например гранёный, бесцветного стекла Улыбка

Гранёный и бесцветный - это свойства стакана (Читайте - класса).
Можно также определить методы стакана (aka Класса) - например "Налить водярой на 100мл", "Отпить 100мл из стакана".

Кстати говоря - "Водяра" - тоже объект со своими свойствами.
Обратите внимание, объект - это то, что создаёт класс при его инициализации.

Попробуйте и Вы Улыбка
Также могу посоветовать почитать главу (по-моему десятую) книги Льюиса Кэррола "История с узелками". Там про абстракцию и классификацию - написано макимально доступно и популярно. Человек на полтора века опередил время Улыбка.

(Добавление)
И кстати... Парни, а давайте напишем класс стакана! Ради примера, а тему прилепим?

(Отредактировано автором: 10 Апреля, 2011 - 22:58:48)



-----
И чё?
 
 Top
vanicon
Отправлено: 11 Апреля, 2011 - 00:01:11
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 808
Дата рег-ции: Янв. 2010  
Откуда: Самара


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




Если так, то идею ООП я понял, но стаканы это стаканами. А мне хочется чтобы кто нибудь написал пример реального облегчения программирования средствами ООП, я имею ввиду в вебе. Допустим есть движок сайта, который просто создает и удаляет записи, страницы и т.д Где там может применяться ООП, и для чего???


-----
Так было, так есть и так будет
 
 Top
Okula
Отправлено: 11 Апреля, 2011 - 00:04:45
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


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




vanicon, одна из основных задач ООП это уменьшить повторяющийся код в приложениях.
 
 Top
OrmaJever Модератор
Отправлено: 11 Апреля, 2011 - 00:25:12
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




vanicon покажите код я переделаю.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
vanicon
Отправлено: 11 Апреля, 2011 - 00:30:48
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 808
Дата рег-ции: Янв. 2010  
Откуда: Самара


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




Цитата:
vanicon покажите код я переделаю.

Вот вам код на проверку логина и пароля:
CODE (php):
скопировать код в буфер обмена
  1.  
  2. function login_form($login,$password,$remember,$element,$screen){
  3. $login = strip_tags($login);
  4. $password = strip_tags($password);
  5.  
  6. $systemsql = mysql_query("SELECT id,type FROM users WHERE login='".$login."' AND password = '".encode_cms($password)."'  AND system = '1'");
  7. $system = mysql_fetch_array($systemsql);
  8.  
  9. if($element <> 'js'){
  10. if($remember <> null){
  11. if($system['id'] <> null){
  12. setcookie ("login", $login,time()+604800,"/");
  13. setcookie ("password", code_cookie($password,oc_info(),get_IP()),time()+604800,"/");
  14. }
  15. }
  16. }
  17. if($system['id'] == null){
  18. $eror =  'введеные Вами пароль или логин не верны';
  19. }
  20. else{
  21. $_SESSION['login'] = $login;
  22. $_SESSION['password'] = encode_cms($password);
  23. $_SESSION['type'] = $system['type'];
  24. update_info($login,$screen);
  25. echo '<script type="text/javascript">location.href="'.HTTPLINK.'/'.$login.'"</script>';
  26. }
  27.  
  28. return $eror;
  29. }
  30.  

(Отредактировано автором: 11 Апреля, 2011 - 00:36:16)



-----
Так было, так есть и так будет
 
 Top
OrmaJever Модератор
Отправлено: 11 Апреля, 2011 - 00:36:16
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




vanicon пишет:
Код какой именно Вам дать?

vanicon пишет:
Допустим есть движок сайта, который просто создает и удаляет записи, страницы и т.д Где там может применяться ООП, и для чего???

И ещё добавлю что опп используется на больших проэктах, а не там где 1 страница. Можите посмотреть примеры в больших cms


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
vanicon
Отправлено: 11 Апреля, 2011 - 00:47:40
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 808
Дата рег-ции: Янв. 2010  
Откуда: Самара


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




Отредактировал сообщение, такой код Вам нужен был? или же поискать что нибудь другое???


-----
Так было, так есть и так будет
 
 Top
OrmaJever Модератор
Отправлено: 11 Апреля, 2011 - 01:00:40
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




Да конешн тут и переделывать нечего но попробовал разживать Улыбка
PHP:
скопировать код в буфер обмена
  1. class auth
  2. {
  3.         private $login = null;
  4.         private $pass  = null;
  5.         public  $err = false;
  6.         public  $remember = false;
  7.  
  8.         public function __construct($login, $pass)
  9.         {
  10.                 $this->login = $this->c($login);
  11.                 $this->pass  = $this->c($pass);
  12.       $query = mysql_query('SELECT id, type FROM users WHERE login="'.$this->login.'" AND password = "'.encode_cms($this->pass).'"  AND system = 1');
  13.                 $row = mysql_fetch_array($query);
  14.                 if(empty($row['id'])) $this->err = 'введеные Вами пароль или логин не верны';
  15.                 else $this->success($row);
  16.         }
  17.  
  18.         private function c($var)
  19.         {
  20.                 return mysql_escape_string(strip_tags(trim($var)));
  21.         }
  22.  
  23.         private function success($r)
  24.         {
  25.                 $_SESSION['login'] = $this->login;
  26.                 $_SESSION['password'] = encode_cms($this->pass);
  27.                 $_SESSION['type'] = $r['type'];
  28.                 if($this->remember === true)
  29.                 {
  30.                         setcookie ("login", $this->login, time()+604800, "/");
  31.                         setcookie ("password", code_cookie($this->pass, oc_info(), get_IP()), time()+604800, "/");
  32.                 }
  33.  
  34.                 update_info(this->login,$this->screen);
  35.                 echo '<script type="text/javascript">location.href="'.HTTPLINK.'/'.$this->login.'"</script>';
  36.         }
  37. }
  38. // сам клас может быть отдельном файле, а при вызове только 3 строки.
  39. $a = new auth($_POST['login'], $_POST['pass']);
  40. $a->remember = true; // or false;
  41. if($a->err !== false) echo $a->err;


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
vanicon
Отправлено: 11 Апреля, 2011 - 01:11:40
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 808
Дата рег-ции: Янв. 2010  
Откуда: Самара


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




Да пример своего же кода увидел и почти ничего не понял Радость , если можно напишите алгоритм ваших действий то есть какие свойства задаете и какие методы используйте и т.д


-----
Так было, так есть и так будет
 
 Top
OrmaJever Модератор
Отправлено: 11 Апреля, 2011 - 01:40:50
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




Я просто распихал по методам и всё, на этом сложно показать суть класов. В классы обычно обьеденяют какую-то групу функций которые по смыслу одинаковы, например класс для mysql (кстате в mysqli специально зделали опп вариант), клас шаблонизатора, класс какого-то модуля.
В этом разделе выкладывают готовые класы для разных потребностей(посмотрите на примерах), люди впихивают в один клас функционал целого скрипта.
ЗЫ. Я пришёл на этот форум с таким же вопросом "зачем нужно ооп?" и в мне так же не дали точного ответа, я забросил этот вопрос а со временем понял сам когда начал писать большие скрипты модули. Просто если вы не поняли сути класов значит оно пока вам не надо, со временем дойдёт само, гласное при написании скрипта поделите код условно но части (например работа с базой, авторизация пользователей, шаблонизатор, галерея и т.д.) и в будущем это могут быть отдельные класы.

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



-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Haron
Отправлено: 11 Апреля, 2011 - 01:49:04
Post Id



Частый гость


Покинул форум
Сообщений всего: 197
Дата рег-ции: Июнь 2010  
Откуда: Оттуда


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




Цитата:
Да конешн тут и переделывать нечего но попробовал разживать

Это ИМХО не ООП - а "класс-обёртка" для функций, так объяснить не получится.

Цитата:
Допустим есть движок сайта, который просто создает и удаляет записи, страницы и т.д Где там может применяться ООП, и для чего???


Мы можем описать классом все страницы. А класс будет возвращать нам те или иные разновидности страниц (Читай объекты типа "страница"), в зависимости от того, какими свойствами мы его наделяем.

Он может вернуть например, "страницу обратной связи" или "главную страницу".

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

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

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

Самое важное это то - что мы применили объектный подход или мышление абстрактной категорией "страницы".

Хотелось бы добавить к вышесказанному:
К сожалению, очень многие пихают классы там где нужно, и ненужно, не зная никакой меры. При этом получаются чересчур ресурсоёмкие приложения. Использовать ООП имеет смысл только там, где это действительно оправдано, как из соображений удобства программирования, так и из соображений быстродействия. Именно умение максимально эффективно использовать оба метода для какой-либо задачи - отличает хорошего программиста от быдлокодера.

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

(Отредактировано автором: 11 Апреля, 2011 - 02:18:46)



-----
И чё?
 
 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