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
Форумы портала PHP.SU :: Версия для печати :: Что такое ООП и для чего он нужен?
Форумы портала PHP.SU » PHP » Программирование на PHP » Что такое ООП и для чего он нужен?

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

1. vanicon - 10 Апреля, 2011 - 13:58:54 - перейти к сообщению
Прочитал на сайте про ООП программирование, но так и не понял в чем различия между традиционными методами и ООП, написано что при хорошем ООП программирование приложение работает быстрее и более гибко... Можете ли вы написать не большой примерчик, который явно будет показана гибкость и быстрота выполнение чем с традиционными методами.
2. Champion - 10 Апреля, 2011 - 14:24:39 - перейти к сообщению
vanicon пишет:
при хорошем ООП программирование приложение работает быстрее
Нет, это вряд ли. Просто при хорошем программировании приложение быстрее и гибче. ООП тут ни при чем.

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

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

Полиморфизьм - тоже хорошая штука, которая как раз проявляется при наследовании при использовании переопределенных методов дочерних классов, например.
3. Toxa - 10 Апреля, 2011 - 15:00:53 - перейти к сообщению
боюсь никто никогда не даст четкого ответа на данный вопрос. ООП - это философия, на эту тему написаны десятки книг
4. OrmaJever - 10 Апреля, 2011 - 15:25:12 - перейти к сообщению
Я читал что класы работают даже медленее простых функций, но лично для меня проще понять код с обьектами чем с простыми функциями, и он получается более гибкий.
5. Haron - 10 Апреля, 2011 - 22:55:24 - перейти к сообщению
Чтобы понять сам принцип и идею ООП - мне помогли небольшие упражнения:

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

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

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

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

(Добавление)
И кстати... Парни, а давайте напишем класс стакана! Ради примера, а тему прилепим?
6. vanicon - 11 Апреля, 2011 - 00:01:11 - перейти к сообщению
Если так, то идею ООП я понял, но стаканы это стаканами. А мне хочется чтобы кто нибудь написал пример реального облегчения программирования средствами ООП, я имею ввиду в вебе. Допустим есть движок сайта, который просто создает и удаляет записи, страницы и т.д Где там может применяться ООП, и для чего???
7. Okula - 11 Апреля, 2011 - 00:04:45 - перейти к сообщению
vanicon, одна из основных задач ООП это уменьшить повторяющийся код в приложениях.
8. OrmaJever - 11 Апреля, 2011 - 00:25:12 - перейти к сообщению
vanicon покажите код я переделаю.
9. vanicon - 11 Апреля, 2011 - 00:30:48 - перейти к сообщению
Цитата:
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.  
10. OrmaJever - 11 Апреля, 2011 - 00:36:16 - перейти к сообщению
vanicon пишет:
Код какой именно Вам дать?

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

И ещё добавлю что опп используется на больших проэктах, а не там где 1 страница. Можите посмотреть примеры в больших cms
11. vanicon - 11 Апреля, 2011 - 00:47:40 - перейти к сообщению
Отредактировал сообщение, такой код Вам нужен был? или же поискать что нибудь другое???
12. OrmaJever - 11 Апреля, 2011 - 01:00:40 - перейти к сообщению
Да конешн тут и переделывать нечего но попробовал разживать Улыбка
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;
13. vanicon - 11 Апреля, 2011 - 01:11:40 - перейти к сообщению
Да пример своего же кода увидел и почти ничего не понял Радость , если можно напишите алгоритм ваших действий то есть какие свойства задаете и какие методы используйте и т.д
14. OrmaJever - 11 Апреля, 2011 - 01:40:50 - перейти к сообщению
Я просто распихал по методам и всё, на этом сложно показать суть класов. В классы обычно обьеденяют какую-то групу функций которые по смыслу одинаковы, например класс для mysql (кстате в mysqli специально зделали опп вариант), клас шаблонизатора, класс какого-то модуля.
В этом разделе выкладывают готовые класы для разных потребностей(посмотрите на примерах), люди впихивают в один клас функционал целого скрипта.
ЗЫ. Я пришёл на этот форум с таким же вопросом "зачем нужно ооп?" и в мне так же не дали точного ответа, я забросил этот вопрос а со временем понял сам когда начал писать большие скрипты модули. Просто если вы не поняли сути класов значит оно пока вам не надо, со временем дойдёт само, гласное при написании скрипта поделите код условно но части (например работа с базой, авторизация пользователей, шаблонизатор, галерея и т.д.) и в будущем это могут быть отдельные класы.
15. Haron - 11 Апреля, 2011 - 01:49:04 - перейти к сообщению
Цитата:
Да конешн тут и переделывать нечего но попробовал разживать

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

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


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

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

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

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

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

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

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

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

 

Powered by ExBB FM 1.0 RC1