Модераторы: Aliance, skyboy, MoLeX, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> объектное vs процедурное, программирование в PHP 
:(
    Опции темы
Gold Dragon
Дата 28.12.2006, 07:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: нет
Всего: 71



ладно, примерно понял.. Только не видят проблем те, кто это умеет  делать smile 

Тогда вопрос в развитие темы.. Я разбирался в разных готовых скриптах и вижу что все спользуют классы. Я почему-то обхожусь одими функциями. Есть ли вообще смысл в классах (немного не так спросил smile ) , т.е. как сильно это облегчает или ускоряет работу?

Это сообщение отредактировал(а) Gold Dragon - 28.12.2006, 07:24


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
-=Ustas=-
Дата 28.12.2006, 10:30 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: нет
Всего: 69



Цитата(Gold Dragon @  28.12.2006,  07:22 Найти цитируемый пост)
. Я почему-то обхожусь одими функциями. 

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

ЗЫ. Могу посоветовать почтитать на досуге Гради Буч-а "Объектно-ориентированный анализ и проектирование". Занимательная весч smile

Добавлено @ 10:35 
Тем более что в пятом PHP полностью переработана объектная модель smile


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Mal Hack
Дата 28.12.2006, 15:46 (ссылка) |  (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



Gold Dragon, разницы в подходе - никакой. Реализация просто несколько более запутанная и менее структурированная получается.
PM ICQ   Вверх
-=Ustas=-
Дата 28.12.2006, 16:04 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: нет
Всего: 69



Цитата(Mal Hack @  28.12.2006,  15:46 Найти цитируемый пост)
Gold Dragon, разницы в подходе - никакой.

Т.е.?! Можешь пояснить?


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Mal Hack
Дата 28.12.2006, 16:11 (ссылка) |  (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



-=Ustas=-, когда ты пишешь на ООП, ты в нужном месте делаешь $obj = new MyModulClass(), где MyModulClass - класс подключаемого модуля. Получается универсализм. Дальше работает уже сам модуль, через конструктор.
Тоже самое с функцями. Ты вызовешь какую-ть MainMyModulFunction, которая примет управление на себя и дальше будет вызывать те функции модуля, которые ей надо. Т.е. ядро только вызывает главную функцию модуля. Все. Ядру плевать что будет делать сам модуль.
PM ICQ   Вверх
-=Ustas=-
Дата 28.12.2006, 17:45 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: нет
Всего: 69



Цитата(Mal Hack @  28.12.2006,  16:11 Найти цитируемый пост)
ты в нужном месте делаешь $obj = new MyModulClass(), где MyModulClass - класс подключаемого модуля. Получается универсализм. Дальше работает уже сам модуль, через конструктор.

Ну это уже детали реализации smile Когда я говорил постом выше, я имел виду более обощено архитектуру модели и т.д. в этих самых подходах. 
Просто с твоим выражением "разницы в подходе - никакой" я категорично не согласен, т.к. тогда бы не было таких понятий как ООП и ПОП. ПОП - это последовательность выполнения действий, ООП - это поведение и взаимодействие. Зацитирую одного теоретика (непомню кто, либо Буч либо Страуструп)
Цитата

ООП это способ мышления, заметно превосходящий по гибкости и удобству "процедурное" и "пошаговое" мышление (программирование). Если Вы мыслите исходя из данных, сомнений в необходимости ООП просто не может быть, если Вы мыслите действиями, то наверное ООП Вам кажется излишне сложным. Это два разных взгляда на жизнь.


Ладно, Mal Hack, я прекращаю, ибо пахнет "ПОП vs ООП"  smile


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Mal Hack
Дата 28.12.2006, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



-=Ustas=-, это все так, ты прав, но моей ключевой мыслью было то, что:

Цитата(Mal Hack @  28.12.2006,  16:11 Найти цитируемый пост)
Т.е. ядро только вызывает главную функцию модуля. Все. Ядру плевать что будет делать сам модуль. 

Уж как это будет представлено - другой вопрос, ООП так ООП, СП, так СП.


Цитата(-=Ustas=- @  28.12.2006,  17:45 Найти цитируемый пост)
ООП - это поведение и взаимодействие

Давай будем реалистами. Применительно к PHP, объекты все равно несут лишь информационную модель скрипта, событиыйности-то нету smile
PM ICQ   Вверх
-=Ustas=-
Дата 28.12.2006, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: нет
Всего: 69



Цитата(Mal Hack @  28.12.2006,  18:06 Найти цитируемый пост)
Применительно к PHP

Ну объектной модели PHP еще ползти smile Хотя в 5-ой значительные измения.
Цитата(Mal Hack @  28.12.2006,  18:06 Найти цитируемый пост)
Ядру плевать что будет делать сам модуль.

Ну это уже парадигма, сложенная на протяжении нескольких тысячилетий smile) Если же ядро будет контролировать еще и модули, то это не будет являться модульной архитектурой smile Высказался немного утрировано, но думаю понятно smile


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Mal Hack
Дата 28.12.2006, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



Цитата(-=Ustas=- @  28.12.2006,  18:32 Найти цитируемый пост)
Ну объектной модели PHP еще ползти smile Хотя в 5-ой значительные измения.

Но событийности, без изменения концепции языка, в нем все равно не будет.
PM ICQ   Вверх
Vaulter
Дата 28.12.2006, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1724
Регистрация: 30.12.2002
Где: бункер

Репутация: нет
Всего: 22



а если взять конкретно OOП и PHP?
ведь по сути обьекта удобно это когда он существует "лопатя" запросы и т.д.
а в PHP важно в тоже время скорость обработки запроса smile
кстати давно задумывался над PHPшными демонами smile


--------------------
PM MAIL WWW ICQ   Вверх
Mal Hack
Дата 28.12.2006, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



Цитата(Vaulter @  28.12.2006,  22:43 Найти цитируемый пост)
а если взять конкретно OOП и PHP?
ведь по сути обьекта удобно это когда он существует "лопатя" запросы и т.д.
а в PHP важно в тоже время скорость обработки запроса smile

Это уже надо смотреть на конкретной реализацией.


Цитата(Vaulter @  28.12.2006,  22:43 Найти цитируемый пост)
кстати давно задумывался над PHPшными демонами smile 

Все-таки это не PHP'шное дело.
PM ICQ   Вверх
Gold Dragon
Дата 29.12.2006, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: нет
Всего: 71



Цитата(-=Ustas=- @  28.12.2006,  10:30 Найти цитируемый пост)
ЗЫ. Могу посоветовать почтитать на досуге Гради Буч-а "Объектно-ориентированный анализ и проектирование". Занимательная весч
 если есть в электронном виде, с удовольствием почитаю..

Так народ, что такое ПОП и ООП? smile

всё равно не могу понять... Вот как я делаю.. Просто создаю разные функции: одна подключает бызу, другая получает данные, третья запихивает в базу. На сколько я понимаю, класс это тоже самое, только подключается чуть по другому и помоему код больше получается



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Mal Hack
Дата 29.12.2006, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



Цитата(Gold Dragon @  29.12.2006,  14:30 Найти цитируемый пост)
Так народ, что такое ПОП и ООП? smile

ООП - объектно ориентированное программирование.
ПОП - процедурно-ориентированное, если я правильно понял. Мы его просто структурным называли.

Цитата(Gold Dragon @  29.12.2006,  14:30 Найти цитируемый пост)
всё равно не могу понять... Вот как я делаю.. Просто создаю разные функции: одна подключает бызу, другая получает данные, третья запихивает в базу. На сколько я понимаю, класс это тоже самое, только подключается чуть по другому и помоему код больше получается

Да тоже самое. Только при ООП у тебя все эти функции как бы в одной переменной лежат. Ну плюс добавляются разные вкусности типа уровней доступа, свойств, что делает процесс кодинга удобнее.
PM ICQ   Вверх
Gold Dragon
Дата 29.12.2006, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: нет
Всего: 71



давайте на примере если не трудно.. вот пример моих функций

Код

function fContentMenu($z){
//********************************************************************
// функция подключения к базе
//********************************************************************
       GLOBAL $baza;
       mysql_connect($baza['SERVER'], $baza['USER'], $baza['PASSW']) or die("Ошибка соединения с сервером");
       mysql_query("SET NAMES cp1251;") or die("Ошибка выбора кодовой страницы"); 
       mysql_select_db($baza['DB']) or die("Ошибка подключения базы");
}

function fContentMenu($z){
//********************************************************************
// функция для получение списка материала по категории
//********************************************************************
    $r = mysql_query($z);
    $info = array();
    for ($i=0; $i<mysql_num_rows($r); $i++) {
        $f = mysql_fetch_array($r);
        $info[$i]['id'] = $f['id'];
        $info[$i]['kat'] = $f['kat'];
        $info[$i]['name'] = $f['name'];
        //$info[$i]['text'] = $f['text'];
        $info[$i]['data'] = fDataToString($f['data']);
        $info[$i]['file'] = $f['file'];
        $info[$i]['n'] = ($i+1);
    }
    if(mysql_num_rows($r)==0){
        header("Location: http://".$_SERVER['HTTP_HOST']."/index.php?page=error&id=1");
        exit;
    }
    return $info;
}

function fContentText($z){
//********************************************************************
// функция для получение текста материала
//********************************************************************
    $r = mysql_query($z);
    if(mysql_num_rows($r)>0){
        $f = mysql_fetch_array($r);
        $info['id'] = $f['id'];
        $info['kat'] = $f['kat'];
        $info['name'] = $f['name'];
        $info['text'] = $f['text'];
        $info['data'] = fDataToString($f['data']);
    }else{
        header("Location: http://".$_SERVER['HTTP_HOST']."/index.php?page=error&id=1");
        exit;
    }
    return $info;
}

как это заменить на класс?


ps
кто-то обещал доку про классы.  smile 


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Mal Hack
Дата 29.12.2006, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



Код

class RD{

function fContentMenu($z){
//********************************************************************
// функция подключения к базе
//********************************************************************
       GLOBAL $baza;
       mysql_connect($baza['SERVER'], $baza['USER'], $baza['PASSW']) or die("Ошибка соединения с сервером");
       mysql_query("SET NAMES cp1251;") or die("Ошибка выбора кодовой страницы"); 
       mysql_select_db($baza['DB']) or die("Ошибка подключения базы");
}
function fContentMenu($z){
//********************************************************************
// функция для получение списка материала по категории
//********************************************************************
    $r = mysql_query($z);
    $info = array();
    for ($i=0; $i<mysql_num_rows($r); $i++) {
        $f = mysql_fetch_array($r);
        $info[$i]['id'] = $f['id'];
        $info[$i]['kat'] = $f['kat'];
        $info[$i]['name'] = $f['name'];
        //$info[$i]['text'] = $f['text'];
        $info[$i]['data'] = fDataToString($f['data']);
        $info[$i]['file'] = $f['file'];
        $info[$i]['n'] = ($i+1);
    }
    if(mysql_num_rows($r)==0){
        header("Location: http://".$_SERVER['HTTP_HOST']."/index.php?page=error&id=1");
        exit;
    }
    return $info;
}
function fContentText($z){
//********************************************************************
// функция для получение текста материала
//********************************************************************
    $r = mysql_query($z);
    if(mysql_num_rows($r)>0){
        $f = mysql_fetch_array($r);
        $info['id'] = $f['id'];
        $info['kat'] = $f['kat'];
        $info['name'] = $f['name'];
        $info['text'] = $f['text'];
        $info['data'] = fDataToString($f['data']);
    }else{
        header("Location: http://".$_SERVER['HTTP_HOST']."/index.php?page=error&id=1");
        exit;
    }
    return $info;
}

}

$obj = new RD();
$obj -> fContentMenu($z);

PM ICQ   Вверх
Vaulter
Дата 29.12.2006, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1724
Регистрация: 30.12.2002
Где: бункер

Репутация: нет
Всего: 22



Gold Dragon, а что это? smile


--------------------
PM MAIL WWW ICQ   Вверх
Gold Dragon
Дата 30.12.2006, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: нет
Всего: 71



я там малость ошибся... первая функция називается fConnect smile

Mal Hack, т.е. я тупо все свои функции загоняю в класс и получаю к ним доступ через $obj -> что-то??

Тогда нет никакой разницы между

Код

$q = $obj -> fContentText($z);
и
Код

$q = fContentText($z);


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


Цитата(Vaulter @  29.12.2006,  22:52 Найти цитируемый пост)
Gold Dragon, а что это? 

одна функция получает список названий статей и материалов, другая получает сам материал конкретной статьи. А что есть замечания или предложения?  smile с удовольствием выслушаю



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Mal Hack
Дата 30.12.2006, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



Цитата(Gold Dragon @  30.12.2006,  09:41 Найти цитируемый пост)
Mal Hack, т.е. я тупо все свои функции загоняю в класс и получаю к ним доступ через $obj -> что-то??


Цитата(Gold Dragon @  30.12.2006,  09:41 Найти цитируемый пост)
Наверное это самое примитивное использование классов и там есть что-то такое, чего я ещё не понимаю.. 



Угу
PM ICQ   Вверх
BuShaRt
Дата 2.1.2007, 00:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: -1
Всего: 6



 smile 
Потести смарти и сразу поймешь, что такое целостый класс...
 
Недавно с другом готовились сдавать Удаленные базы данных, ну он вообшем ламер полный, спросил че такое класс, я подумал подумал и ответил, что это коллекция методов (функций)... Хотя ответ не раскрывает все сути, но в целом становиться яснее...
Кроме того все методы связанны между собой=) 

Вот примерчик юзанья класса.. может не самый удачный... но я именно с этого момента понял, что классы лучше функций (когда писал код)
Код

class WorkMySQL {
    var $query;
    var $link;
    var $dbhost;
    var $dbuser; 
    var $dbpass; 
    var $dbname; 
    var $dbprif;  
    
    
    function WorkMySQL ($select=true) {
        //Подключение файла конфигурации
        include 'config.php';
        //Определение внутриклассовых переменных
        $this->dbhost = $dbhost;
        $this->dbuser =    $dbuser;
        $this->dbpass =    $dbpass;
        $this->dbname =    $dbname;
        $this->dbprif =    $dbprif;
        //Подключение к СУБД
        ($this->link = mysql_pconnect($this->dbhost, $this->dbuser, $this->dbpass)) || die("Couldn't connect to MySQL");
        //Если в качестве аргумента не передеанно FALSE, то выделяем определененную БД.
        if ($select) mysql_select_db($this->dbname, $this->link) || die("Couldn't open db: ".$this->dbname.". Error if any was:".mysql_error() );
        
    }
    
    //Метод экранирования запроса
    function quote_smart($value,$x=true) {
         // если magic_quotes_gpc включена, то снимаем экранированние
     if (get_magic_quotes_gpc()) $value = stripslashes($value);
        //Если переменная не число и $x не вводилось, то окружаем кавычками и экранируем
     if ($x) {
            if (!is_numeric($value)) $value = "'" . mysql_real_escape_string($value) . "'";
            return $value;
        //Если переменная $x была введена со значением FALSE, значит $value уже окруженна кавчками
        } else {
            if (!is_numeric($value)) $value = mysql_real_escape_string($value);
            return $value;
        }        
    }
    
    //Проверка пароля
    function CheckPass($login, $password) 
    {    
        $this->query = sprintf ("SELECT login, password, grup FROM %s WHERE login=%s and password=%s",
                $this->quote_smart($this->dbprif."_users",false),
                $this->quote_smart($login),
                $this->quote_smart($password));
        $result=mysql_query($this->query, $this->link) or die("Error returned if any: ".mysql_error());
        if(mysql_num_rows($result)==1) {
            $row=mysql_fetch_array($result);
            return $row;
        }
        return false;
    }

//Теперь чтоб проверить совпадает ли логин и пароль надо только
include 'WorkMySQL';
$mysql_obj = new WorkMySQL;
if (!($row = $mysql_obj->CheckPass ($_POST['login'], $_POST['password']))) {
    $filter_obj->messages[] = 'Логин - пароль не совпадают.';    




PM MAIL   Вверх
Opik
Дата 2.1.2007, 06:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: нет
Всего: 55



Цитата

Итак, в чем же основные преимущества ООП, почему оно стало таким популярным ? 

Как ни странно, но трудно ответить на этот вопрос не объяснив базовых понятий. Уверен, что усвоив базовые понятия ООП, вы сами без труда ответите на этот вопрос. 

Несмотря на то, что в различных источниках делается акцент на те или иные особенности внедрения и применения ООП, 3 основных (базовых) понятия ООП остаются неизменными. К ним относятся: 

Наследование (Inheritance) 
Инкапсуляция (Encapsulation) 
Полиморфизм (Polymorphism) 
Эти понятия, как три кита, лежат в основе мира ООП и, конечно же, будут рассмотрены мною подробнейшим образом. Наряду с ними будет рассмотрен и ряд других понятий и определений. 
А для начала рассмотрим пару мнений, которые в какой-то степени помогут Вам прояснить сложившуюся вокруг поставленного вопроса ситуацию. 

Итак, первое из них имеет некоторый академический оттенок: 

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

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

Не очень понятно ? Тогда попробуем зайти с другой стороны и упростим описание. Начнем с общеизвестного примера. 

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

Что Вы сделали для того, чтобы получить соль ? Просто сказали: "Передай мне, пожалуйста, соль". 

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

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

Так в чем же принципиальная разница ? 

Разница заключается в том, что объектно-ориентированный подход с просьбой передать солонку оставляет за объектом (Вашим другом) право решать как отреагировать и что сделать в ответ на поступившую просьбу. А Вы можете даже не знать (к примеру, не видеть) как Ваш друг (объект) выполнил Вашу просьбу. А зачем Вам это знать ? Вы в стандартной форме поставили перед ним задачу (сделали вызов) и получили ответ. 

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

Этот простой пример иллюстрирует только один из принципов ООП, суть которого: "Объект отвечает за все действия, которые он производит в ответ на запрос клиента". 

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

http://www.firststeps.ru/theory/oop/r.php?2
PM MAIL Skype   Вверх
Eugene_Bond
Дата 2.1.2007, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 3.9.2006

Репутация: нет
Всего: 4



Mal Hack, очень вредный пример. только отпугивать от применения ООП годится smile

В продолжение начатого Opikом: OOP Concept explained: Polymorphism (Technology) -- простое и ясное объяснение полиморфизма
PM MAIL   Вверх
Mal Hack
Дата 2.1.2007, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



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

Цитата(Eugene_Bond @  2.1.2007,  11:13 Найти цитируемый пост)
Mal Hack, очень вредный пример. только отпугивать от применения ООП годится smile

Интересно чем? Что я показал базовый синтаксис описания класса и создания объекта?
Да и вашего "не вредного" примера я тут что-то не видел.

PM ICQ   Вверх
Blaga
Дата 2.1.2007, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ЛамМер++
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 15.11.2005
Где: г. Иркутск

Репутация: нет
Всего: 4



А может кто нибудь даст почитать по теме? А то никак не могу найти. Нужно что бы было применимо именно к PHP. И что бы на русском. smile


--------------------

http://displayart.ru - Обои.
http://a2themes.ru - Сайт о движках DLE, phpBB3, WordPress.
PM MAIL ICQ   Вверх
Mal Hack
Дата 2.1.2007, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



Из того, что видел я (и писал сам), могу предложить:
http://phpclub.ru/detail/article/oop-vs-proc
http://phpclub.ru/detail/article/intro_php5
http://vingrad.ru/PHP-ART-002848
PM ICQ   Вверх
BuShaRt
Дата 2.1.2007, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: -1
Всего: 6



Код

<?php 

print "Hello, world."; 

?>  

Вот пример объектно-ориентированного кода, который делает то же самое: 

<?php 

class helloWorld { 
  function myPrint() { 
    print "Hello, world."; 
  } 

$myHelloWorld = new helloWorld(); 
$myHelloWorld->myPrint(); 

?>
 

Я плакал, новички теперь будут счастливы писать на ООП )))
PM MAIL   Вверх
Mal Hack
Дата 2.1.2007, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



BuShaRt, плакать ты можешь столько, сколько тебе вздумается, только вот попробуй объяснить начинающему, что такое ООП и как вообще оно работает вот на таком коде:

Код

<?php

    class clKernel extends clGlobalSQL 
    {
        protected  $TEXT = "";
        
        public  $Errors = array();
        public  $ErrorCount = 0;
        
        protected   $ModulLink = null;
        protected   $PDO = null;
        protected    $LNG = null;
        
        public  $CurrTime = "";
        public  $glURI = "";
        
        public  $User = null;
        public  $UserAuth = false;
        public  $us_ip = "";
        public  $us_agent = "";
        public  $us_hash = "";
        
        public function __construct( $mod , $pdo , $lng , $glURI )
        {
            $this->ModulLink = & $mod;
            $this->PDO       = & $pdo;
            $this->LNG       = $lng;

            $this->ModulLink->KernelLink = & $this;
            
            $this->glURI     = $glURI;    
            $this->us_ip     = $this->kerSfGetIP();
            $this->us_agent     = $_SERVER['HTTP_USER_AGENT'];            
            $this->CurrTime  = time() + ( date( "z" ) * 3600 - C_TIMEZONE * 60 );
            
            if ( $_SERVER['REQUEST_METHOD'] == 'POST' && isset( $_POST['action'] ) ) 
            {
                switch ( $_POST['action'] )
                {
                    case "auth":        $this->kerAuth();
                    break;
                }
            }
            
            $this->kerMwOutPut();
        }

        protected function kerMwOutPut()
        {
            $this->kerAuthCheck();
            $this->TEXT = $this->skGlobalMain();        
            $this->kerTMPLParser();
            print $this->TEXT;    
        }
        
        protected function __call( $name , $arguments )
        {
            return  ( $this->ModulLink != null && method_exists( $this->ModulLink , $name ) ) 
                    ? call_user_func( array( $this->ModulLink , $name ) )
                    : ( ( $name == "modCreate" ) ? $this->kerMwGET() : "" );
        }
        
        protected function __get( $name )
        {
            return  ( $this->ModulLink != null && isset( $this->ModulLink-> { $name } ) ) 
                    ? $this->ModulLink-> { $name }
                    : "[Unknown property " . $name . "]";
        }

        protected function kerMwGET()
        {
            if ( ! empty( $this->glURI[1] ) ) 
            {
                switch ( $this->glURI[1] )
                {
                    default:        return $this->skGlobalWelcomeText();
                    break;      
                }
            }
        }

        protected function kerMwErrors()
        {
            return  ( sizeof( $this->Errors ) == 0 )
                    ? ""
                    : $this->skGlobalErrors( implode( "<br />" , $this->Errors ) );
        }

        public function kerMwSetError( $error )
        {
            $this->Errors[] = $error;
            $this->ErrorCount++;
        }

        public function kerPDO( $query , $params = array() )
        {    
            $link = null;

            if( ! method_exists( $this , $query ) )
            {    
                if( ! method_exists( $this->ModulLink , $query ) )
                {    throw new PDOException( "Unknown query: " . $query );    }
                else    
                {    $link = $this->ModulLink;    }
            }
            else 
            {    $link = $this;    }
            
            //print_r($params);
            $dbh = $this->PDO->prepare( call_user_func( array( $link , $query ) ) );
            $dbh->execute( $params );

            return $dbh;
        }

        protected function kerTMPLParser()
        {
            $this->TEXT = str_replace( "<% CSS %>" , $this->skGlobalCSS() . "\n" . $this->kerMwGetModMethodResult( "skModulCSS" ) , $this->TEXT );
            $this->TEXT = str_replace( "<% JAVASCRIPT %>" , $this->skGlobalJavaScript() . "\n" . $this->kerMwGetModMethodResult( "skModulJavaScript" ) , $this->TEXT );
            $this->TEXT = str_replace( "<% BASEPATH %>" , $this->skGlobalBasePath() , $this->TEXT );
            $this->TEXT = str_replace( "<% TOP %>" , $this->skGlobalTop() , $this->TEXT );
            $this->TEXT = str_replace( "<% QUIT_BUTTON %>" , ( ( $this->UserAuth ) ? $this->skGlobalQuitButton() : "" ) , $this->TEXT );
            
            $temp = ( $this->UserAuth ) 
                    ? $this->skGlobalContent() 
                    : $this->skGlobalLoginForm();
            
            $this->TEXT = str_replace( "<% CONTENT %>" , $temp , $this->TEXT );    
            $this->TEXT = str_replace( "<% MAIN_MENU %>" , ( ( $this->UserAuth ) ? $this->skGlobalMainMenu() : "" ) , $this->TEXT );    
            $this->TEXT = str_replace( "<% BODY %>" , $this->modCreate() , $this->TEXT );    
            $this->TEXT = str_replace( "<% BOTTOM %>" , $this->skGlobalBottom() , $this->TEXT );
            $this->TEXT = str_replace( "<% ERRORS %>" , $this->kerMwErrors() , $this->TEXT );
        }

        public function kerSfRedirect( $url = "" )
        {
            header( "Location: " . ( ( empty( $url ) ) ? $_SERVER['REQUEST_URI'] : $url ) );
            exit();
        }

        public function kerSfSetCookie( $name , $value , $time )
        {    setcookie( $name , $value , $this->CurrTime + $time , "/" );    }

        public function kerSfDelCookie( $name )
        {    setcookie( $name , "" , 3 , "/" );    }

        public function kerSfGetIP()
        {
            if ( $ip = getenv( "HTTP_CLIENT_IP" ) )
         {  return ( ip2long( $ip ) !== false ) ? $ip : "[unknown]";  }

            if ( $ip = getenv( "HTTP_X_FORWARDED_FOR" ) )
         {
              if ( $ip == '' || $ip == "unknown" )
               {  $ip = getenv( "REMOTE_ADDR" );  }

              return ( ip2long( $ip ) !== false ) ? $ip : "[unknown]";    
         }
        
         if ( $ip = getenv( "REMOTE_ADDR" ) )
         {  return ( ip2long( $ip ) !== false ) ? $ip : "[unknown]";  }
        }

        public function kerSfGetMicroTime()
        {
            $mt = explode( " ", microtime() );
            return ( (float) $mt[0] + (float) $mt[1] );
        }

        public function kerSfBuildListBox( $arr , $checked = "" )
        {
            $ret = "";

            foreach( $arr as $k => $v )
            {    $ret .= "<option value=". $k ." " . ( ( $k == $checked ) ? "selected" : "" ) . ">" . $v . "\n";        }
            
            return $ret;            
        }

        public function kerSfCheckEmail( $email )
        {    return ( preg_match( "#^([a-z0-9]){1}[a-z0-9\-_.+]*([a-z0-9]){1}@[a-z0-9]{1,}(([a-z0-9]{1,}[a-z0-9\-\.]{0,1}[a-z0-9]{1,})|[a-z0-9]{1,})*\.[a-z]{2,4}$#i" , $email ) ) ? true : false;    }

        public function kerSfGetGroups()
        {
            $dbh = null;
            $dbh = $this->kerPDO( "sqlGlobalGetGroups" );
            
            $result = $dbh->fetchAll();
            
            foreach( $result as $k => $v )
            {    $g[ $v['group_id'] ] = $v['group_name'];    }
                
            return $g;
        }
        
        public function kerSfVerifyPasswords( $p1 , $p2 )
        {
            if( ! empty( $p1 ) && ! empty( $p2 ) )
            {
                if( sha1( $p1 ) != sha1( $p2 ) )
                {    $this->kerMwSetError( $this->LNG['error_pass_did_match'] );    }
                elseif( strlen( $p1 ) < 8 )
                {    $this->kerMwSetError( $this->LNG['error_pass_short'] );    }
                else 
                {    return true;    }
            }
            elseif( empty( $p1 ) )
            {    $this->kerMwSetError( $this->LNG['error_pass_enter'] );    }
            else 
            {    $this->kerMwSetError( $this->LNG['error_pass_repeat'] );    }
        
            return false;
        }
        
        public function kerSfRus2Lat( $text )
        {
            $rus = array( "Рђ" , "Р‘" , "Р’" , "Р“" , "Р”" , "Р•" , "РЃ" , "Р–" , "Р—" , "Р˜" , "Р™" , "Рљ" , "Р›" , "Рњ" , "Рќ" , "Рћ" , "Рџ" , "Р " , "РЎ" , "Рў" , "РЈ" , "Р¤" , "РҐ" , "Р¦" , "Р§" , "РЁ" , "Р©" , "РЄ" , "Р«" , "Р¬" , "Р­" , "Р®" , "РЇ" ,
                          "Р°" , "Р±" , "РІ" , "Рі" , "Рґ" , "Рµ" , "С‘" , "Р¶" , "Р·" , "Рё" , "Р№" , "Рє" , "Р»" , "Рј" , "РЅ" , "Рѕ" , "Рї" , "СЂ" , "СЃ" , "С‚" , "РЈ" , "С„" , "С…" , "С†" , "С‡" , "С?" , "С‰" , "СЉ" , "С‹" , "СЊ" , "СЌ" , "СЋ" , "СЏ" 
                        );
            $lat = array( "A" , "B" , "V" , "G" , "D" , "E" , "E" , "ZH" , "Z" , "I" , "IY" , "K" , "L" , "M" , "N" , "O" , "P" , "R" , "S" , "T" , "U" , "F" , "KH" , "C" , "CH" , "SH" , "SHCH" , "" , "Y" , "'" , "E" , "YU" , "YA" ,
                          "a" , "b" , "v" , "g" , "d" , "e" , "e" , "zh" , "z" , "i" , "iy" , "k" , "l" , "m" , "n" , "o" , "p" , "r" , "s" , "t" , "u" , "f" , "kh" , "c" , "ch" , "sh" , "shch" , "" , "y" , "'" , "e" , "yu" , "ya" 
                        );
                        
            return str_replace( $rus , $lat , $text );
        }

        protected function kerAuthSecurityHash()
        {  $this->us_hash = md5( $this->User->user_nick ) . md5( $this->us_agent ) . md5( $this->us_ip ) . md5( $this->CurrTime );  }

        protected function kerAuthFalse()
        {
            $this->kerSfDelCookie( "session_user" );
            $this->kerSfDelCookie( "session_time" );
        }

        protected function kerAuthCheck()
        {
            if( ! isset( $_COOKIE['session_user'] ) || ! isset( $_COOKIE['session_time'] ) )
            {    
                $this->User = null;
                return;
            }
            
         $dbh = null;
            $dbh = $this->kerPDO( "sqlGlobalGetUser" , array( ":user_nick" => $_COOKIE['session_user'] ) );
                
            if( ( $result = $dbh->fetch( PDO::FETCH_OBJ ) ) === false )
            {    $this->kerAuthFalse();    }

         $this->User = $result;
         $this->kerAuthSecurityHash();
         
         $temp =  $this->CurrTime + ( 15 * 60 );

         $dbh = null;
         $dbh = $this->kerPDO( "sqlGlobalGetUserSession" , array( ":id" => $this->User->user_id , ":hash" => $this->us_hash , ":time" => $temp ) );
            
            if( ( $result = $dbh->fetch( PDO::FETCH_OBJ ) ) === false )
            {    $this->kerAuthFalse();    }

            if( isset( $_GET['quit'] ) )
         {
             $dbh = null;
             $dbh = $this->kerPDO( "sqlGlobalDeleteUserSession" , array( ":id" => $this->User->user_id , ":hash" => $this->us_hash ) );

                $this->kerAuthFalse();
                $this->kerSfRedirect( "/admin/" );
         }
            
         $dbh = null;
         $dbh = $this->kerPDO( "sqlGlobalUpdateUserSession" , array( ":id" => $this->User->user_id , ":hash" => $this->us_hash , ":time" => $this->CurrTime ) );

         $this->kerSfSetCookie( "session_user" , $this->User->user_nick , 604800 );
            $this->kerSfSetCookie( "session_time" , $temp , 604800 );
         
         $this->UserAuth = TRUE;        
        }

        protected function kerAuth()
        {
            if( empty( $_POST['login'] ) || empty( $_POST['pass'] ) || empty( $_POST['security_hash'] ) || sha1( $_POST['security_hash'] ) != C_ADMIN_HASH )
            {    $this->kerSfRedirect();    }
            
         $dbh = null;
         $dbh = $this->kerPDO( "sqlGlobalGetUserPass" , array( ":user_nick" => $_POST['login'] , ":user_pass" => sha1( $_POST['pass'] ) ) );

         if( ( $result = $dbh->fetch( PDO::FETCH_OBJ ) ) === false )
            {    $this->kerAuthFalse();    }

         $this->User = $result;
            $this->kerAuthSecurityHash();
         
         $temp = $this->CurrTime + ( 15 * 60 );

         $dbh = null;
         $dbh = $this->kerPDO( "sqlGlobalCreateUserSession" , array( ":id" => $this->User->user_id , ":hash" => $this->us_hash , ":time" => $temp ) );

            $this->kerSfSetCookie( "session_user" , $this->User->user_nick , 604800 );
            $this->kerSfSetCookie( "session_time" , $temp , 604800 );
            
            $this->kerSfRedirect();        
        }
    };

?>

PM ICQ   Вверх
BuShaRt
Дата 2.1.2007, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: -1
Всего: 6



Mal Hack
Ну как не как новичок врядли решит программироваться на том примере, где 7 строк, когда есть пример в 1 строку=))
PM MAIL   Вверх
Mal Hack
Дата 2.1.2007, 16:12 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



Цитата(BuShaRt @  2.1.2007,  16:09 Найти цитируемый пост)
Ну как не как новичок врядли решит программироваться на том примере, где 7 строк, когда есть пример в 1 строку=)) 

Еще раз объясняю для тех кто на подлодке.
Ты будешь новичку показывать основы синтаксиса и применения ООП в PHP на модуле из 1000 строк? Нет.
Я говорю о том, как показать основы. Чтобы человек решил использовать ООП, он должен до этого дорасти, тобишь осознать ТЕОРЕТИЧЕСКИЕ аспекты ООП, а не код на 1000 строк.
PM ICQ   Вверх
BuShaRt
Дата 2.1.2007, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: -1
Всего: 6



Mal Hack
Цитата

Чтобы человек решил использовать ООП, он должен до этого дорасти, тобишь осознать ТЕОРЕТИЧЕСКИЕ аспекты ООП, а не код на 1000 строк.


 smile Верно... 

тока получается новичку вообше нет смысла показывать плюсы ООП+))
PM MAIL   Вверх
Eugene_Bond
Дата 2.1.2007, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 3.9.2006

Репутация: нет
Всего: 4



Цитата(Mal Hack @  2.1.2007,  14:55 Найти цитируемый пост)
Интересно чем? Что я показал базовый синтаксис описания класса и создания объекта?

Скорее тем, что после такого примера кроме усложнения синтаксиса преимуществ не ощущается..


Цитата(Mal Hack @  2.1.2007,  14:55 Найти цитируемый пост)
Да и вашего "не вредного" примера я тут что-то не видел.

Мне тоже лень что-то обильное писать, но ща поднатужусь..
PM MAIL   Вверх
Opik
Дата 2.1.2007, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: нет
Всего: 55



Цитата(Mal Hack @  2.1.2007,  13:55 Найти цитируемый пост)
Opik, без обид, но статья ни о чем


Я не так не считаю, там на явном примере поясняется смысл.
Читайте тогда здесь: http://www.intuit.ru/department/se/tppobj/
PM MAIL Skype   Вверх
Eugene_Bond
Дата 2.1.2007, 22:32 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 3.9.2006

Репутация: нет
Всего: 4



Что-то вроде этого..
Опять таки упрощенно и "на коленке" в блокноте написанное. Может и не запуститься

Код

<?php


    class db {        
        protected $host = 'localhost'; 
        protected $base = 'test'; 
        protected $port = 3306; 
        protected $user = 'root'; 
        protected $pass = ''; // ;-)
        
        // Hold an instance of the class
        private static $instance;
        
        private function __construct() {
            mysql_connect($this->host, $this->user, $this->pass) or die("Ошибка соединения с сервером");
            mysql_select_db($this->base) or die("Ошибка подключения базы");
        }
        
        public static function singleton() {
            if (!isset(self::$instance)) {
                $c = __CLASS__;
                self::$instance = new $c;
            }
            return self::$instance;
        }
        
        public function Exec($sql) {
            $result = mysql_query($sql);
            if (!$result) {
                trigger_error("Could not successfully run query ($sql) from DB: " . mysql_error(), E_USER_ERROR); // You can to throw exception if you like it more
                return false;
            }
            $res = array();
            if (mysql_num_rows($result) > 0) {
                while ($row = mysql_fetch_assoc($result)) {
                    $res[] = $row;
                }
            }
            return $res;
        }
    }
    
    class pageProcessor {
        
        private $db;
        private $pageId;
        
        private function __construct() {
            $this->db = db::singleton();
        }
        
        public function getContentText() {
            $sql = "SELECT * FROM table WHERE id='$id'";    // I think it's something like this here
            if (count($res = (array) $this->db->Exec($sql))) {
                return array_shift($res);
            } else {
                header("Location: http://".$_SERVER['HTTP_HOST']."/index.php?page=error&id=1");
                exit;
            }
        }
        
        public function getContentMenu() {
            $sql = "???";    // Some SQLfor menu
            if (count($res = (array) $this->db->Exec($sql))) {
                return $res;
            } else {
                header("Location: http://".$_SERVER['HTTP_HOST']."/index.php?page=error&id=1");
                exit;
            }
        }
    }
    
    
    $pageOne = new pageProcessor(18);    //This is page #18
    $pageTwo = new pageProcessor(69);    // This is page #69
    
    $pageOneMenu = $pageOne->getContentMenu();    // Menu for page #18
    $pageOneText = $pageOne->getContentText();    // Text for page #18


PM MAIL   Вверх
Mal Hack
Дата 2.1.2007, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



Цитата(Opik @  2.1.2007,  22:26 Найти цитируемый пост)
Я не так не считаю, там на явном примере поясняется смысл.

Вот честно, перечитал еще раз... Уже зная что такое ООП не могу ну никак соединить этот пример с ООП. Да, отдалено суть показывает, но отдаленно. Но, ИМХО, конечно же.


Цитата(Opik @  2.1.2007,  22:26 Найти цитируемый пост)
Читайте тогда здесь: http://www.intuit.ru/department/se/tppobj/ 

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

Цитата(Eugene_Bond @  2.1.2007,  22:32 Найти цитируемый пост)
Опять таки упрощенно и "на коленке" в блокноте написанное. Может и не запуститься

Тогда какого черта надо сюда это постить !!

Цитата(Eugene_Bond @  2.1.2007,  22:09 Найти цитируемый пост)
Скорее тем, что после такого примера кроме усложнения синтаксиса преимуществ не ощущается..

Почитай внимательнее о чем я с BuShaRt'ом дискутировал... Тоже самое и в твоем случае.


PM ICQ   Вверх
Eugene_Bond
Дата 2.1.2007, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 3.9.2006

Репутация: нет
Всего: 4



Цитата(Mal Hack @  2.1.2007,  22:57 Найти цитируемый пост)
Тогда какого черта надо сюда это постить !!

Многоуважаемый Мал Хак.
Грубите, пожалуйста, своей бабушке! Вы же модератор..



Цитата(Mal Hack @  2.1.2007,  22:57 Найти цитируемый пост)
Почитай внимательнее о чем я с BuShaRt'ом дискутировал...

Любые основы должны демонстрировать преимущества. Например уменьшение количества строк кода, функциональность и удобство в применении.
PM MAIL   Вверх
Mal Hack
Дата 2.1.2007, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



Цитата(Eugene_Bond @  2.1.2007,  23:14 Найти цитируемый пост)
Многоуважаемый Мал Хак.
Грубите, пожалуйста, своей бабушке! Вы же модератор..

Я считаю неуважение к участникам форума выкладывать код, который: "Может и не запуститься".

Цитата(Eugene_Bond @  2.1.2007,  23:14 Найти цитируемый пост)
Любые основы должны демонстрировать преимущества. Например уменьшение количества строк кода, функциональность и удобство в применении. 


Цитата(Mal Hack @  2.1.2007,  16:12 Найти цитируемый пост)
Еще раз объясняю для тех кто на подлодке.
Ты будешь новичку показывать основы синтаксиса и применения ООП в PHP на модуле из 1000 строк? Нет.
Я говорю о том, как показать основы. Чтобы человек решил использовать ООП, он должен до этого дорасти, тобишь осознать ТЕОРЕТИЧЕСКИЕ аспекты ООП, а не код на 1000 строк. 


PM ICQ   Вверх
Eugene_Bond
Дата 3.1.2007, 07:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 3.9.2006

Репутация: нет
Всего: 4



Цитата(Mal Hack @  2.1.2007,  23:18 Найти цитируемый пост)
Я считаю неуважение к участникам форума выкладывать код, который: "Может и не запуститься".

http://forum.vingrad.ru/index.php?showtopi...st&p=979753

Вопросов больше не имею
PM MAIL   Вверх
-=Ustas=-
Дата 3.1.2007, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: нет
Всего: 69



Gold Dragon, я тебе говорил за эту литературу, на мой взгляз неплохие труды в плане теории. Объектно-ориентированный анализ и проектирование. Потом можно заодно и Страуструпа почитать.

Это сообщение отредактировал(а) -=Ustas=- - 3.1.2007, 23:55


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
awers
Дата 4.1.2007, 03:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1465
Регистрация: 22.3.2006
Где: Россия, Таганрог

Репутация: нет
Всего: 31



Вообще каждой цели свои методы.
Там где надо написать hello world я буду писать hello world
А там где пахнет модулем - class hello { functuion message(){print(__CLASS__.' world'); } }

Думаю так )
PM MAIL WWW ICQ Skype   Вверх
Gold Dragon
Дата 4.1.2007, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: нет
Всего: 71



Так, народ, я хоть и новичок, но создать class hello в состоянии. Меня больше интересует не элементарное использование, а именно то, что другими способами сделать труднее.



PS 
кстати, тему лучше переименовать с Философия class smile

Добавлено @ 10:44 

кстати, очень понравилась статья
http://vmk.ugatu.ac.ru/book/buch/index.htm

правда пока только начал читать



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
-=Ustas=-
Дата 4.1.2007, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: нет
Всего: 69



Gold Dragon, потом как ты ознакомишься с теорией ООП, советую прочитать Обзор паттернов проектирования, чтобы ты имел представление где и как строить архитектуру классов и самого приложения ;)


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Mal Hack
Дата 4.1.2007, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



Цитата(Gold Dragon @  4.1.2007,  10:40 Найти цитируемый пост)
Меня больше интересует не элементарное использование, а именно то, что другими способами сделать труднее.

Большая задача. Большое кол-во переменных. При структурном подходе ты был вынужден каждую через global подключать или через параметры передавать, а при объектом тебе достаточно ее один раз в конструкторе в свойство записать и затем с ним работать.
PM ICQ   Вверх
Gold Dragon
Дата 4.1.2007, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: нет
Всего: 71



вот! это уже интересно. Если честно, то для меня это уже стоновится проблемой.


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
nerezus
Дата 15.4.2007, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: нет
Всего: 43



Цитата

Давай будем реалистами. Применительно к PHP, объекты все равно несут лишь информационную модель скрипта, событиыйности-то нету
 Как это нету? Когда нто лишь недостаток реализации определенной программы, в которой ее нету.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
CyClon
Дата 17.4.2007, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 3.12.2005

Репутация: нет
Всего: 4



Если хочется понять ООП в PHP - имхо нужно читать литературу по ООП, в которой все примеры демонстрируются на PHP, а не на других языках...

Вообще, я смотрю ООП мало кому дается так легко smile Буквально год назад я вообще не понимал зачем это нужно, какой из этого толк и вообще "функции рулят". Когда перечитал несколько статей о ООП в PHP от разных авторов и понял основы, все равно не примеял его. Но постепенно начал сталкиваться с задачами и вспоминая основы ООП задумывалвася "А ведь это можно написать с использование классов, получится проще и красивее". Сейчас время от времени применяю.


--------------------
user posted image
PM   Вверх
-=Ustas=-
Дата 18.4.2007, 22:38 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: нет
Всего: 69



Цитата(CyClon @  17.4.2007,  21:34 Найти цитируемый пост)
Если хочется понять ООП в PHP - имхо нужно читать литературу по ООП, в которой все примеры демонстрируются на PHP, а не на других языках...

Ну тут ты в корне не прав, и я могу тебе это доказать и даже убедить тебя. ООП - это Объектно-Ориентированный Подход, а на каких языках - это уже по-барабану. Да, я согласен, в некоторых языках такая объектная модель, в других такая-то, но теоретическая основа везде аналогична, и ОБЪЕКТ он и в африке объект. Поэтому прежде - МАТ-чать!


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
CyClon
Дата 21.4.2007, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 3.12.2005

Репутация: нет
Всего: 4



Цитата
Ну тут ты в корне не прав, и я могу тебе это доказать и даже убедить тебя. ООП - это Объектно-Ориентированный Подход, а на каких языках - это уже по-барабану. Да, я согласен, в некоторых языках такая объектная модель, в других такая-то, но теоретическая основа везде аналогична, и ОБЪЕКТ он и в африке объект. Поэтому прежде - МАТ-чать!


Если будет выбор книг: ООП, ООП в (Visual Basic || Delphi || C++), ООП в PHP. Объем книг одинаковый, автор у всех вменяемый. Я бы выбрал ООП в PHP. Теория подкрепляется примерами на самом PHP. Если мне нужно понять ООП вообще и использовать его в PHP, этот выбор будет разумнее чем книга про просто ООП, и тем более про ООП в других языках.


--------------------
user posted image
PM   Вверх
nerezus
Дата 21.4.2007, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: нет
Всего: 43



А что, много книг про ООП в ПХП?  smile 
Насколько я знаю, это не так ;)


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Sergey912
Дата 21.4.2007, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 3.1.2007

Репутация: нет
Всего: нет



Из всего топика и вообще в ООП понял, что оно лучше в проектировке так как задумывается как единое целое т.е. объекты могут взаимодействовать и пишутся с учетом связей в друг друге + к тому однотипные группируются в один класс, скажем класс баз данных и потом их удобно юзать. Кстати если класс грамотно написан им удобно пользоваться даже если его писал не ты, скажем в отличии от 50 процедур, которые писались под конкретную задачу и использовать их по делу для других часто довольно сложно....

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

- 3 группы текстов
- по 50 в каждом
- нестандартная верстка

нужно свести к одному т.е. оформить одинаково. Вот где тут его использовать, как вобщем-то для самых разнородных задач начать проектировать такие вещи... вот тут процедуры имхо проще и практичнее. Не понимаю я как ООП тут мне поможет  smile 
PM MAIL WWW   Вверх
Vaulter
Дата 3.5.2007, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1724
Регистрация: 30.12.2002
Где: бункер

Репутация: нет
Всего: 22



ООП там где много повторного кода.


--------------------
PM MAIL WWW ICQ   Вверх
Letov
Дата 7.5.2007, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 321
Регистрация: 22.2.2007
Где: Санкт-Петербург

Репутация: нет
Всего: 4



ООП - как стиль программирования. Кто-то его придерживается, а кто-то - нет. Каждый выбирает сам для себя. ООП - структурированная модель. Удобно в больших приложениях. Функция - для маленьких приложений или старых версий языка. Переносить, например, приложение с PHP5 на PHP4 удобнее, если использовать функции.


--------------------
Не бывает плохих языков программирования. Бывают плохие программисты...

PM MAIL   Вверх
-=Ustas=-
Дата 8.5.2007, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: нет
Всего: 69



Слушайте, подобная тема "объектное vs процедурное" уже далеко не актуальна, по интернету подобных обсуждей как грязи. Чтоб понять ху из ху, нужно взять любую книгу какого-нить ООриентированного языка, пусть тот же C++ или Java (есть и просто теория) , там в первых главах обзательно эта тема затрагивается, после прочтения которых вопросы у вас сами отпадут.

Добавлено через 4 минуты и 20 секунд
Ну... не все вопросы конечно, сразу отпадут, но часть эт точно, а после практической реализации точно все.


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
WolfON
Дата 13.5.2007, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 604
Регистрация: 19.7.2004

Репутация: нет
Всего: 8



Каждый подход применим к своей задаче.
Хороший программист должен писать хороший не только ОО код, но и функциональный и структурный.
PM MAIL ICQ   Вверх
koreshX
Дата 22.5.2007, 17:24 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 28.3.2007

Репутация: нет
Всего: нет



Цитата

Функции это рутина, которая в конечном счете превращается в кашу, в которой потом разработчик начинает месить грязь.

CMS Drupal - пример, где модули пишутся исключительно с использованием функционального подхода. И я почему-то совершенно не видел каши, рутины или грязи. В тоже время встречал исключительно объектные проекты, в которых было разобьраться почти не реально. ПРограммируя на php использовать ооп нужно там где это нужно, а не везде, как мне кажется. Ибо это не Java и не C# (и не руби..), где ооп есть основа всего и вся.
Моё ИМХО - пытаться писать на пхп исключительно объектно - это будет лишь пародия на системы написанные на исключительно объектных языках.
PM MAIL   Вверх
vasac
Дата 23.5.2007, 10:33 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

Репутация: нет
Всего: 36



Цитата(koreshX @  22.5.2007,  17:24 Найти цитируемый пост)
И я почему-то совершенно не видел каши

А я видел smile

Цитата(koreshX @  22.5.2007,  17:24 Найти цитируемый пост)
пытаться писать на пхп исключительно объектно - это будет лишь пародия на системы написанные на исключительно объектных языках. 

Мотивируйте, пожалуйста. А так же поясните, что такое "исключительно объектно".
PM WWW   Вверх
koreshX
Дата 24.5.2007, 00:00 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 28.3.2007

Репутация: нет
Всего: нет



Цитата

Мотивируйте, пожалуйста. А так же поясните, что такое "исключительно объектно".


"Исключительно объектно" - это значит что нельзя сложить 2 числа не создав класса. А "ИМХО", на сколько я знаю в мотивациях не нуждается...

Цитата

А я видел smile

Посмею предположить, что вы видели модули написанные не самым лучшим образом.
PM MAIL   Вверх
WolfON
Дата 24.5.2007, 00:32 (ссылка)   | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 604
Регистрация: 19.7.2004

Репутация: нет
Всего: 8



koreshX, абсолютно объектно-ориентированным языком можно назвать разве-что руби, да и то с натяжкой, по этому не надо гиперболизировать.
очевидно, что автор подразумевал разумное использование возможностей ооп, которыми наделен php

Это сообщение отредактировал(а) WolfON - 24.5.2007, 00:40
PM MAIL ICQ   Вверх
WIPS
Дата 4.6.2007, 00:35 (ссылка) |   (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 22.5.2006
Где: Украина, Киев

Репутация: 1
Всего: 8



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

 1. Повышается понимаемость кода. Возьмем, напр., ф-ю __стрелять(). Снайпер стреляет по мишени, бомж стреляет сигареты, девушка стреляет глазками. Используя ПОП необходимо либо передавать доп. параметр "кто_стреляет", либо использовать префиксное именование ф-ций, а отсюда вторая выгода:
 2. Отчасти решается проблема именования. 
 3. Пусть у девушки есть ещё методы кроме __стрелять(), напр. __могу_ли_охмурить(), __могу_ли_съесть_пирожное(), __надо_ли_худеть() и пр.. Все они зависят от огромного числа параметров (рост, вес, объем груди, талии и бедер, харизма, наличие косметики и т.п.). В ООП достаточно задать эти параметры единожды для объекта, а в ПОП вам каждый раз придется описывать девушку передавая кучу её параметров в каждую ф-ю пусть даже и массивом.
 4. Мы можем заставить всю нашу компанию (снайпер, бомж и девушка) стрелять по одной команде (__стрелять()), т.к. все они имеют таковой интерфейс. 
 5. Так же легче добавлять новых членов в нашу компанию (спина напр. тоже может __стрелять()).
 6. Наша компания может состоять и из нескольких девушек (объектов одного класса), кот. тоже можно заставить стрелять по одной команде. Все будут делать это примерно одинаково, но каждая немножко по своему в зависимости от параметров (см. п. 3).

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

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

Р.S. А понимать ООП проще все же вообще в отрыве от языка. Главное - понять концепцию. А ее реализация в каждом конкретном случае (читай - ЯП), это лишь вопрос синтаксиса и наличия/отсутсвия некоторых возможностей.

P.Р.S. Все вышесказанное - мое ИМХО.

--------------------
Автопроизводители, машины, марки, модели!
PM MAIL WWW ICQ Skype   Вверх
Alan
Дата 4.6.2007, 16:58 (ссылка) |  (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 2.8.2006
Где: Россия, Самара

Репутация: нет
Всего: нет



Перехожу на ООП... постепенно. Преписывать старые проекты не буду. Но новые начну с ООП.
PM MAIL ICQ   Вверх
Sergey912
Дата 26.7.2007, 02:21 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 3.1.2007

Репутация: нет
Всего: нет



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

Цитата

1. Повышается понимаемость кода. Возьмем, напр., ф-ю __стрелять(). Снайпер стреляет по мишени, бомж стреляет сигареты, девушка стреляет глазками. Используя ПОП необходимо либо передавать доп. параметр "кто_стреляет", либо использовать префиксное именование ф-ций, а отсюда вторая выгода:
 2. Отчасти решается проблема именования. 

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

Это сообщение отредактировал(а) Sergey912 - 26.7.2007, 02:22
PM MAIL WWW   Вверх
Diesel Draft
Дата 26.7.2007, 10:42 (ссылка) |  (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

Репутация: -1
Всего: 5



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


--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
Mal Hack
Дата 26.7.2007, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



ООП ничего не может дать, это понимание программирования может дать возможность использовать "фишки" ООП, которые на больших проектах сильно улучшают структуриацию и модульную схему приложения.
PM ICQ   Вверх
Diesel Draft
Дата 26.7.2007, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

Репутация: -1
Всего: 5



Вот ты не понимаешь, ты не видел абстрактную сторону


--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
WIPS
Дата 30.7.2007, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 22.5.2006
Где: Украина, Киев

Репутация: 1
Всего: 8



Цитата(Sergey912 @  26.7.2007,  01:21 Найти цитируемый пост)
Он не изучен даже до конца, не то чтобы сделаны однозначные выводы и построена четкая модель

Кто это "он"? Который не изучен до конца?

Цитата(Sergey912 @  26.7.2007,  01:21 Найти цитируемый пост)
Но никуда не денешься от реализации всех функций "стреляния" 

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

Цитата(Sergey912 @  26.7.2007,  01:21 Найти цитируемый пост)
реализации огромного кол-ва классов. Но их избыточность это совсем не хорошо.

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

Цитата(Diesel Draft @  26.7.2007,  09:42 Найти цитируемый пост)
но другие могут написать аналог предмета или живого существа и тогда складывается впечатление что ты работаешь з реальным предметом, а не з программным кодом. Когда ты это поймешь то мир программирования покажется другим.

Полностью согласен. Это то, что я пытался сказать в своем посте.

Цитата(Mal Hack @  26.7.2007,  12:53 Найти цитируемый пост)
это понимание программирования

В чем же заключается это самое "понимание программирования"?

--------------------
Автопроизводители, машины, марки, модели!
PM MAIL WWW ICQ Skype   Вверх
NNaarreekk
Дата 30.7.2007, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 768
Регистрация: 23.6.2007
Где: Армения

Репутация: нет
Всего: 3



Насколько я знаю класы нужны только для того чтобы секономить время!

То есть можешь написать ту же програму без класов, но получится в 3 раза длинее и медленее!
PM MAIL WWW   Вверх
Diesel Draft
Дата 30.7.2007, 17:03 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

Репутация: -1
Всего: 5



Цитата(NNaarreekk @ 30.7.2007,  15:41)
Насколько я знаю класы нужны только для того чтобы секономить время!

То есть можешь написать ту же програму без класов, но получится в 3 раза длинее и медленее!

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


--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
Mal Hack
Дата 30.7.2007, 18:27 (ссылка) |  (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



Цитата(Diesel Draft @  30.7.2007,  17:03 Найти цитируемый пост)
Класс позволяет поделить программу на конкретные модули

Не говори глупостей, пожалуйста. Модули это модули. Классы это классы. Никакой связи между собой они не имеют...
На функциях теже самые модули так же совершенно спокойно делаются.
PM ICQ   Вверх
Diesel Draft
Дата 31.7.2007, 09:49 (ссылка)    | (голосов:6) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

Репутация: -1
Всего: 5



Разве? Кто еще со мной несогласен на счет модулей в форме классов?


--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
Daevaorn
Дата 31.7.2007, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 1
Всего: 70



Цитата(Diesel Draft @  31.7.2007,  10:49 Найти цитируемый пост)
Разве? Кто еще со мной несогласен на счет модулей в форме классов? 

модули не обязательно классы и наоборот.
PM MAIL WWW   Вверх
Diesel Draft
Дата 31.7.2007, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

Репутация: -1
Всего: 5



Daevaorn, а я не говорил что обязательно, и это все образно. Каждый понимает модуль по своему.


--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
WIPS
Дата 1.8.2007, 09:40 (ссылка) |  (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 22.5.2006
Где: Украина, Киев

Репутация: 1
Всего: 8



Цитата(Diesel Draft @  30.7.2007,  16:03 Найти цитируемый пост)
Самый большой плюс сановит удобство

Еще плюс - возможность задания способов обработки данных, скрытых в классе. Функциями этого никак не добьешься.

Цитата(Mal Hack @  30.7.2007,  17:27 Найти цитируемый пост)
Не говори глупостей, пожалуйста. Модули это модули. Классы это классы. 

Что в вашем понимании модуль?

--------------------
Автопроизводители, машины, марки, модели!
PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 1.8.2007, 11:41 (ссылка) |   (голосов:6) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



Diesel Draft, модуль это не образно....

Модуль - это программная единица, куда вынесены куски программного кода, разделенные по смысловой и модульной нагрузке.
PM ICQ   Вверх
Diesel Draft
Дата 1.8.2007, 11:51 (ссылка)   | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

Репутация: -1
Всего: 5



Цитата(WIPS)

Еще плюс - возможность задания способов обработки данных, скрытых в классе. Функциями этого никак не добьешься.

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


Цитата(Mal Hack)

Модуль - это программная единица, куда вынесены куски программного кода, разделенные по смысловой и модульной нагрузке. 

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


--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
Mal Hack
Дата 1.8.2007, 11:57 (ссылка)  | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



Diesel Draft, и чего-же тут не точного???
Шаблон, это заготовка и к модулям отношения не имеет. Да, модули ты делаешь по смысловому шаблону, но это не то...

Учи матчасть !!!
PM ICQ   Вверх
Diesel Draft
Дата 1.8.2007, 12:07 (ссылка)   | (голосов:5) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

Репутация: -1
Всего: 5



Mal Hack, Ты вот влепил мне минус в репу, а вот за что? Цитирую "Прежде чем что-то делать, надо сначала хотя бы основные понятия понять....". Вот если ты не знаешь, то не путай других. Шаблон это заготовка, но не только дизайна. Это может быть и шаблон кода.
У тебя есть компьютерное образование, или ты учился как большая часть здесь на примерах? Просто то что ты говоришь доказывает что ты не ориентируешься в этом. Ты видишь только одну сторону монеты. Почитай этот раздел, тебе это говорю не только я.


П.С. И хватит мне портить репу, посте тебя меня народ за дилетанта какого принимает. Ты уже мне 3 минуса втиснул. 

Это сообщение отредактировал(а) Diesel Draft - 1.8.2007, 12:35


--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
Mal Hack
Дата 1.8.2007, 15:18 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



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

Цитата(Diesel Draft @  1.8.2007,  12:07 Найти цитируемый пост)
 Шаблон это заготовка, но не только дизайна. Это может быть и шаблон кода.

Вот я не понимаю. Ты тупой или прикидываешься, прости конечно (и пусть мне модеры вешают кирпич, может хоть так, удасться достучаться до твоих, талантливых, стоящих мозгов, которые вместо того, чтобы учиться, пытаются учить других). Уже в который раз ты не хочешь понять тех вещей, которые тебе говорят люди, понимающие больше тебя. Не надо мне приписывать тех слов, которых я не говорил? Я говорил о дизайне? Хоть слово, хоть намек? Нет. Если ты не в состоянии осознать то, что понятие модуля и понятие шаблона не имеют ничего общего, а связь того, что модули, состоящие из классов или функций написаны по одним правилам, читаю для тебя специально, по шаблону, имеет лишь практический смысл реализации, а не теоретической основы, нечего тебе делать в программировании.

Цитата(Diesel Draft @  1.8.2007,  12:07 Найти цитируемый пост)
Просто то что ты говоришь доказывает что ты не ориентируешься в этом. Ты видишь только одну сторону монеты. Почитай этот раздел, тебе это говорю не только я.

МОжет быть ты просто не можешь понять того, что  я говорю, точнее подумать над этим? ;)
Я привожу факты, определения, от тебя я только слышу: "ты не прав" и т.п. Где обоснование?
Не надо думать слишком поверхностно..


Минусы в репу "ты мне я тебе" можешь лепить сколько влезет, мне на репу - плевать, она тут уже давно профессиональные навыки не отображает...
PM ICQ   Вверх
Diesel Draft
Дата 1.8.2007, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

Репутация: -1
Всего: 5



Хорошо, давай начнем с начала или этот разговор начинает переходить в тупой спор.

Цитата(Diesel Draft)

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

Я человеку хотел абстрактно объяснить что такое класс.


Давай так. З чем ты со мной не согласен? Скажи, а я постараюсь аргументировать свой ответ.


П.С. Я закончил "Компьютерная инженерия". Веб не учили. Но я з самого маслу сам занимался.





--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
Mal Hack
Дата 1.8.2007, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



В данной процитированной фразе не согласен с тем, что именно класс позволяет разделить программу на модули. На модули программу разделяет программист при проектировке, классы - вид реализации модулей.... Это лишь способ реализации модуля или его части.

Удобство это зависит от задачи.
PM ICQ   Вверх
Diesel Draft
Дата 1.8.2007, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

Репутация: -1
Всего: 5



Вот, мы уже сошлись во мнении.

теперь смотри. Почему я сказал что позволяет поделить на модули? Потому что большая часть людей понимает модуль как отдельную часть, которую можно подключить, отключить и делать другую бесполезную роботу. Но это я сказал на таком простом уровне. Просто когда человеку скажешь термином он не поймет (нет хорошо сформулированного термина).


--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
Mal Hack
Дата 1.8.2007, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



Цитата(Diesel Draft @  1.8.2007,  15:46 Найти цитируемый пост)
Вот, мы уже сошлись во мнении.

Если ты понял, наконец, что я тебе объяснял...


Цитата(Diesel Draft @  1.8.2007,  15:46 Найти цитируемый пост)
теперь смотри. Почему я сказал что позволяет поделить на модули? Потому что большая часть людей понимает модуль как отдельную часть, которую можно подключить, отключить и делать другую бесполезную роботу. Но это я сказал на таком простом уровне. Просто когда человеку скажешь термином он не поймет (нет хорошо сформулированного термина). 

И где в фразе слово класс??? Нету.. Термины объяснять надо...
PM ICQ   Вверх
Diesel Draft
Дата 1.8.2007, 15:59 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

Репутация: -1
Всего: 5



Основа ООП  это объект  smile  и он есть главный. Тобто главное понимание вещи в объектном мире


--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
sTa1kEr
Дата 1.8.2007, 22:37 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 2
Всего: 146



Diesel Draft, извините, но я не совсем понимаю. Что вы пытаетесь доказать? По-моему уже из определения предельно ясно, что такое модуль. Модуль это составная часть общей системы, но весь смысл модуля заключается в легкой отделимости от общей системы и такого же простого присоединения без вреда для всей системы. И для программирования это не исключение, не важно на чем написан модуль и какие технологии при этом использованы, если это условие выполняется. За примерам далеко ходить не надо, те же расширения PHP могут быть собраны как модули, т.е. если есть файл - есть требуемая функциональность, и пусть он хоть на ассемблере написан.
Объекты не имеют *никакого* отношения с модулями. Я согласен с тем, что ООП имеет похожую модульную структуру, но при этом не стоит путать понятия ООП и модульная система.

Это сообщение отредактировал(а) sTa1kEr - 1.8.2007, 23:15
PM MAIL   Вверх
Mal Hack
Дата 1.8.2007, 22:43 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



Diesel Draft, основы ооп, это принципы наследования, инкапсуляции и полиморфизма.. Объект - лишь способ реализации ;)
PM ICQ   Вверх
WIPS
Дата 1.8.2007, 23:38 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 22.5.2006
Где: Украина, Киев

Репутация: 1
Всего: 8



Цитата(sTa1kEr @  1.8.2007,  21:37 Найти цитируемый пост)
Объекты не имеют *никакого* отношения с модулями. 

Однако согласитесь, что модуль может быть реализован как объект. При этом будет отвечать всем выдвигаемым к модулю требованиям.

P.S. По моему, все говорят одно и тоже, но друг друга считают при этом неправыми =)

--------------------
Автопроизводители, машины, марки, модели!
PM MAIL WWW ICQ Skype   Вверх
sTa1kEr
Дата 2.8.2007, 00:42 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 2
Всего: 146



Цитата(WIPS @  1.8.2007,  23:38 Найти цитируемый пост)
Однако согласитесь, что модуль может быть реализован как объект. При этом будет отвечать всем выдвигаемым к модулю требованиям.

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

Цитата(WIPS @  1.8.2007,  23:38 Найти цитируемый пост)
.S. По моему, все говорят одно и тоже, но друг друга считают при этом неправыми =)

А по моему, либо кто-то не понимает простого смысла слова *модуль*, либо просто боится показаться не компетентными в данной области.

Это сообщение отредактировал(а) sTa1kEr - 2.8.2007, 00:48
PM MAIL   Вверх
WIPS
Дата 2.8.2007, 08:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 22.5.2006
Где: Украина, Киев

Репутация: 1
Всего: 8



Цитата(sTa1kEr @  1.8.2007,  23:42 Найти цитируемый пост)
А по моему, либо кто-то не понимает простого смысла слова *модуль*


после этого тяжело не понять, что такое модуль:
Цитата(sTa1kEr @  1.8.2007,  21:37 Найти цитируемый пост)
Модуль это составная часть общей системы, но весь смысл модуля заключается в легкой отделимости от общей системы и такого же простого присоединения без вреда для всей системы.

--------------------
Автопроизводители, машины, марки, модели!
PM MAIL WWW ICQ Skype   Вверх
Diesel Draft
Дата 2.8.2007, 10:33 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

Репутация: -1
Всего: 5



А вам не кажется мы говорим о том самом но разными словами?

Цитата(Mal Hack)

Diesel Draft, основы ооп, это принципы наследования, инкапсуляции и полиморфизма.. Объект - лишь способ реализации ;) 

Наследование, инкапсуляция и полиморфизм это его свойства

Цитата

Объе́ктно-ориенти́рованное программи́рование — парадигма программирования, в которой предметная область представляется системой структур данных, каждая из которых представляет некий отдельный предмет (объект), относящийся к своему типу с его внутренними свойствами и действиями над ним.



--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
Fally
Дата 2.8.2007, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 17.8.2006
Где: Dahla

Репутация: нет
Всего: 4



Цитата(WIPS @  1.8.2007,  23:38 Найти цитируемый пост)
что модуль может быть реализован как объект.

Поправка, модуль может быть реализован как класс, но не как объект...

Цитата

Но любые объекты тесно связаны с другими объектами - в этом и заключается смысл ООП.

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

Это сообщение отредактировал(а) Fally - 2.8.2007, 11:51


--------------------
Прежде чем задать вопрос на форуме воспользуйтесь поиском.
user posted image
user posted image
PM MAIL   Вверх
Mal Hack
Дата 2.8.2007, 13:51 (ссылка) |   (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



Цитата(Diesel Draft @  2.8.2007,  10:33 Найти цитируемый пост)
А вам не кажется мы говорим о том самом но разными словами?

Совершенно нет.

Цитата(Diesel Draft @  2.8.2007,  10:33 Найти цитируемый пост)
Наследование, инкапсуляция и полиморфизм это его свойства

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

Когда я писал своей предыдущий пост, я отвечал вот на это сообщение:
Цитата
Основа ООП  это объект  smile  и он есть главный. Тобто главное понимание вещи в объектном мире 


Я еще раз повторю (для всех) то, что написал выше. Объект - лишь практическя реализация, которая использует все возможности парадигмы ООП !!!!
PM ICQ   Вверх
Fally
Дата 2.8.2007, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 17.8.2006
Где: Dahla

Репутация: нет
Всего: 4



Цитата(Mal Hack @  2.8.2007,  13:51 Найти цитируемый пост)
Объект - лишь практическя реализация, которая использует все возможности парадигмы ООП !!!! 

+1


--------------------
Прежде чем задать вопрос на форуме воспользуйтесь поиском.
user posted image
user posted image
PM MAIL   Вверх
Diesel Draft
Дата 2.8.2007, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

Репутация: -1
Всего: 5



Что является основой ООП?


--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
Mal Hack
Дата 2.8.2007, 14:58 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



Основа - концепция программирования, включающая в себя такие концепции, как полиморфизм, наследование и инкапсляция.
PM ICQ   Вверх
Diesel Draft
Дата 2.8.2007, 15:01 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

Репутация: -1
Всего: 5



Основа это представление все в объектном виде. Поэтому и называется объектно ориентированное программирование


--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
Mal Hack
Дата 2.8.2007, 15:05 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



Основа - это теория, а объект лишь ее практическая реализация.
ООП подразумевае под собой не только описание классов и создание объектов, но и подход к решению задачи, отличный от структурного программирования.
PM ICQ   Вверх
SamDark
Дата 2.8.2007, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


Профиль
Группа: Участник
Сообщений: 1424
Регистрация: 25.7.2006
Где: Voronezh

Репутация: 1
Всего: 38



Diesel Draft
Принципы.

Вообще модуль сам по себе не обязательно должен быть реализован на принципах ООП.

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


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
Diesel Draft
Дата 2.8.2007, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

Репутация: -1
Всего: 5



Mal Hack, тебе не кажется что мы будем спорить еще страниц 20? Думаю это бессмысленно, все ровно говорим то самое всегда


--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
SamDark
Дата 2.8.2007, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


Профиль
Группа: Участник
Сообщений: 1424
Регистрация: 25.7.2006
Где: Voronezh

Репутация: 1
Всего: 38



Mal Hack
Вообще новичкам отлично объяснятся ООП на примере модулей. Только я предпочитаю открывать системный блок и показывать им железо(объекты классов), разъёмы(интерфейсы) и т.д.


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
Diesel Draft
Дата 2.8.2007, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

Репутация: -1
Всего: 5



SamDark, Вот хоть ты согласен со мной что мы говорим почти о том самом просто на разных языках?


--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
Mal Hack
Дата 2.8.2007, 15:18 (ссылка)   | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



Модули это модули... Мне их объясняли на сях, структурных...
Дизель, ты не прав!!! (с) ЕБН
PM ICQ   Вверх
Diesel Draft
Дата 2.8.2007, 15:26 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

Репутация: -1
Всего: 5



Mal Hack, Объекты это не модули!!! Но на Них можно построить!!!! И не только на них!!! 

Ты уже сам наченаеш изменять своим словам. И вовсе все что я скажу тебе не нравится!!!


--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
Mal Hack
Дата 2.8.2007, 15:30 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



Цитата(Diesel Draft @  2.8.2007,  15:26 Найти цитируемый пост)
Mal Hack, Объекты это не модули!!!

Я тебе это и пытаюсь объяснитьб и доказаваю, что модули это модули и к ооп никакого отношения не имеют !!!
PM ICQ   Вверх
SamDark
Дата 2.8.2007, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


Профиль
Группа: Участник
Сообщений: 1424
Регистрация: 25.7.2006
Где: Voronezh

Репутация: 1
Всего: 38



Diesel Draft
Mal Hack
Давайте я срезюмирую?

Модуль - автономная, взаимозаменяемая на сходные часть целого. В программировании - функционально законченный фрагмент программы.

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


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
Fally
Дата 2.8.2007, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 17.8.2006
Где: Dahla

Репутация: нет
Всего: 4



Эмм.. конечно прошу прощения, что вмешиваюсь в столь ожесточённую дискуссию smile, но: 
Цитата(SamDark @  2.8.2007,  15:08 Найти цитируемый пост)
можно реализовать модули классами, можно объектами,

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


--------------------
Прежде чем задать вопрос на форуме воспользуйтесь поиском.
user posted image
user posted image
PM MAIL   Вверх
Diesel Draft
Дата 2.8.2007, 15:41 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

Репутация: -1
Всего: 5



SamDark, +1



Mal Hack, ООП можно объяснить разными способами. Я пояснил на модулях, я не привязал. раньше я объяснял на яблоках, но тут долго писать, а мне на русском это сложно делать. А то что ты вцепился в это это уже твоя проблема


--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
SamDark
Дата 2.8.2007, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


Профиль
Группа: Участник
Сообщений: 1424
Регистрация: 25.7.2006
Где: Voronezh

Репутация: 1
Всего: 38



Fally
Конечно чувствую. Не зря же написал.

Реализация объектами подразумевает описание модулей одноимёнными классами следуя некоторым правилам (такое практиковалось на PHP4) и инстанциирование только одного из них.

Diesel Draft
Mal Hack
Не ругайтесь. Всё хорошо  smile 


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
Diesel Draft
Дата 2.8.2007, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

Репутация: -1
Всего: 5



Mal Hack, У меня ощущение что в реальной жизни я тебе сделал что то плохого, но ни разу тебе не видел


--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
Mal Hack
Дата 2.8.2007, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



Diesel Draft, да нельзая объяснить ООП разными способами. НЕЛЬЗЯ...
То, как ты определял через модули - неверно, потому модуль это - объективное понятие, ооп - субъективное...

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

Ну вот честно, я не понимаю, что тут сложного для понимая.
PM ICQ   Вверх
Diesel Draft
Дата 2.8.2007, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

Репутация: -1
Всего: 5



Mal Hack, та вот не понимаешь что это пример. Тебе что никогда ничего не объясняли на других предметах. Это не означает что это оно, просто отдалено похожие. Почему ты вцепился в точность, и отбрасывает остальное


--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
Mal Hack
Дата 2.8.2007, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



Потому, что точности в твоем определении нет... Абстрагироваться-то можно, но у тебя это НЕ ПОЛУЧИЛОСЬ !!!
PM ICQ   Вверх
Diesel Draft
Дата 2.8.2007, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

Репутация: -1
Всего: 5



Mal Hack, Может только ты этого не понял  smile 


--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
Mal Hack
Дата 2.8.2007, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



Исходя из того, что я привел все 4 определения, и не услышал на них ничего против, то судя по всему я прекрасно все понимаю ;)
PM ICQ   Вверх
Diesel Draft
Дата 2.8.2007, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

Репутация: -1
Всего: 5



на мои кроме тебя тоже никто вроде не жаловался


--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
Oflashp
  Дата 2.8.2007, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 2.8.2007
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: 2



Осилил 3 странице, если уже кто-то это написал, прошу прощения за повтор:
При ПОП программировании на PHP:
1)Имеется библиотека с функциями, которая подружается допустим index.php.
PHP откладывает функции и параметры в память и ждёт их вызова.
2)Таже самая библиотека, использует какие-то переменные, если обьявлены до функции они становятся доступными без обьявления в теле кода или конструкцией global
3)Если включен перехват переменных из запроса, они становятся глобальными для кода. И если вначале вы определили, что login="Вася", то можно переопределить запросом ...?login="Alex". Это я так к примеру. Для более понятного вот код:
Код

<?
function login()
{
 global $login;
 if($login == "")
 {
  $login="Вася";
 }
}
?>

4)Попробуйте в стандартном коде обьяснить, что вот эта переменная относится сюда, эта сюда...Заипетесь
При ООП:
1)Пока не вызовите класс, откладываться в памяти ничего не будет
2)Да хоть десять, пока в класс не пропишите, ему будет побоку
3)Читай 2.
4)Решение усложнения структуры класса решает и этот вопрос.

Это так на пальцах.
Если у вас приложение простое - а под простым приложением понимается не количество кода в строках(комментарии тоже бывают как целый FAQ), а:
1)У вас нет библиотек не написанных вами или библиотек динамических которые подружаются в зависимости от ситуации.
2)Количество библиотек не более 10
3)Количество переменных глобальных не большое
4)Если есть шаблоны, то вкладки и выкладки шаблонов при результате не превышает трех уровней
Используйте смело ПОП. Он там не нужен.
Для остального юзайте классы.
PS: Рекомендую использовать классы так же для построенние модельных и пост-модульных систем. Другим программистам будет проще писать дополнения.

Это сообщение отредактировал(а) Oflashp - 2.8.2007, 22:16
PM MAIL ICQ   Вверх
WIPS
Дата 2.8.2007, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 22.5.2006
Где: Украина, Киев

Репутация: 1
Всего: 8



Цитата(Mal Hack @  2.8.2007,  15:08 Найти цитируемый пост)
ООП - теория, концепция создания ПО с использованием таких понятий как класс и объект, где последние два - лишь способ реализации концепции, пускай и другого пока не придумали.

Как это не придумали? А JavaScript? A Ada95+?

Цитата(Mal Hack @  2.8.2007,  15:08 Найти цитируемый пост)
Объект все равно производная класса

Не всегда. Понятие "класс" для ООП в принципе не является обязательным.

--------------------
Автопроизводители, машины, марки, модели!
PM MAIL WWW ICQ Skype   Вверх
Daevaorn
Дата 3.8.2007, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 1
Всего: 70



Цитата(WIPS @  3.8.2007,  00:52 Найти цитируемый пост)

Цитата(Mal Hack @  2.8.2007,  15:08 Найти цитируемый пост)
Объект все равно производная класса

Не всегда. Понятие "класс" для ООП в принципе не является обязательным.

угу. а в некоторых ОО языках класс сам является объектом.
PM MAIL WWW   Вверх
WIPS
Дата 3.8.2007, 01:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 22.5.2006
Где: Украина, Киев

Репутация: 1
Всего: 8



Цитата(Daevaorn @  2.8.2007,  23:42 Найти цитируемый пост)
угу. а в некоторых ОО языках класс сам является объектом. 

 smile 

--------------------
Автопроизводители, машины, марки, модели!
PM MAIL WWW ICQ Skype   Вверх
Daevaorn
Дата 3.8.2007, 02:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 1
Всего: 70



Цитата(WIPS @ 3.8.2007,  02:34)
Цитата(Daevaorn @  2.8.2007,  23:42 Найти цитируемый пост)
угу. а в некоторых ОО языках класс сам является объектом. 

 smile

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

Это сообщение отредактировал(а) Daevaorn - 3.8.2007, 02:10
PM MAIL WWW   Вверх
Fally
Дата 3.8.2007, 10:54 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 17.8.2006
Где: Dahla

Репутация: нет
Всего: 4



Цитата(WIPS @  2.8.2007,  23:52 Найти цитируемый пост)
Как это не придумали? А JavaScript? A Ada95+?

Это - Я-З-Ы-К-И П-Р-О-Г-Р-А-М-М-И-Р-О-В-А-Н-И-Я. Но никак не концепции программирования.
Цитата(Daevaorn @  3.8.2007,  00:42 Найти цитируемый пост)
а в некоторых ОО языках класс сам является объектом. 

Что за бред? Названия и определения терминов ООП учите. Вот специально для Вас (и не только):
1) Под классом подразумевается некая сущность, которая задает некоторое общее поведение для объектов. /Википедия
2) Под объектом подразумевается некоторая сущность, обладающая состоянием и поведением. Как правило при рассмотрении объектов выделяется, что объект принадлежат одному или нескольким классам, которые в свою очередь определяют поведение объекта. /Википедия/

З.Ы. Механизм отражений (reflection) в РНР есть тоже.

Это сообщение отредактировал(а) Fally - 3.8.2007, 10:55


--------------------
Прежде чем задать вопрос на форуме воспользуйтесь поиском.
user posted image
user posted image
PM MAIL   Вверх
SamDark
Дата 3.8.2007, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


Профиль
Группа: Участник
Сообщений: 1424
Регистрация: 25.7.2006
Где: Voronezh

Репутация: 1
Всего: 38



WIPSFally
В JavaScript нет ОО в привычном понимании. т.е. классов и объектов. Там совершенно другой принцип, основаный на прототипах. Вот там как раз с натяжкой можно сказать, что "класс сам является объектом", хотя сравнивать прототипное программирование с классическим ОО, а тем более приводить к нему, как многие делают, некорректно.


Это сообщение отредактировал(а) SamDark - 3.8.2007, 11:29


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
Mal Hack
Дата 3.8.2007, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



Oflashp, мы тут с позиции теории разговариваем, а вы нам снова про практику..

Цитата(WIPS @  2.8.2007,  23:52 Найти цитируемый пост)
Не всегда. Понятие "класс" для ООП в принципе не является обязательным.

Бред. Яйца без курицы не бывает. Объект нельзя создать без его определения. Другое дело, когда система в программе заранее создает объект по своим прототипам.
PM ICQ   Вверх
Daevaorn
Дата 3.8.2007, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 1
Всего: 70



Цитата(Fally @  3.8.2007,  11:54 Найти цитируемый пост)
Что за бред? Названия и определения терминов ООП учите. Вот специально для Вас (и не только):

А Вам бы я посоветовал не писать о том о чем не знаете. А то в лужу сели.
Цитата(Fally @  3.8.2007,  11:54 Найти цитируемый пост)
1) Под классом подразумевается некая сущность, которая задает некоторое общее поведение для объектов. /Википедия
2) Под объектом подразумевается некоторая сущность, обладающая состоянием и поведением. Как правило при рассмотрении объектов выделяется, что объект принадлежат одному или нескольким классам, которые в свою очередь определяют поведение объекта. /Википедия/

Всё это справедливо для классов в языке python. О чем я и написал выше. Умейте слушать.
Цитата(Fally @  3.8.2007,  11:54 Найти цитируемый пост)
З.Ы. Механизм отражений (reflection) в РНР есть тоже.

Да, но не настолько гибкийи функциональный. На что я тоже уже посетовал. Если бы токой появился в php жить стало бы веселения. И в частности ORM было бы делать проще.
PM MAIL WWW   Вверх
Oflashp
Дата 3.8.2007, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 2.8.2007
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: 2



Цитата(Mal Hack @ 3.8.2007,  11:43)
Oflashp, мы тут с позиции теории разговариваем, а вы нам снова про практику..

Цитата(WIPS @  2.8.2007,  23:52 Найти цитируемый пост)
Не всегда. Понятие "класс" для ООП в принципе не является обязательным.

Бред. Яйца без курицы не бывает. Объект нельзя создать без его определения. Другое дело, когда система в программе заранее создает объект по своим прототипам.

Я же написал, что я прочитал первые 3-4 страницы топика, больше не выдержил.
Да и у меня сложен так ум, что проще понять примерами, чем теорией.
А вообще сложно назвать ваше обсуждение теорией. Уже обсуждение в стиле:
"Начали про то, как установить унитаз, заканчиваете о том, как сделать ремонт во всём туалете." 
P.S: Ничего личного.
P.S2: Остаюсь скромным наблюдателем
smile 

Это сообщение отредактировал(а) Oflashp - 3.8.2007, 12:28
PM MAIL ICQ   Вверх
Mal Hack
Дата 3.8.2007, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



Цитата(Oflashp @  3.8.2007,  12:27 Найти цитируемый пост)
Да и у меня сложен так ум, что проще понять примерами, чем теорией.

Я точно также, но есть некоторые теоретические аспекты, которые надо понять, как теорию..


В догонку. Не знаю как и что в Питоне реализовано, но надо отдавать себе отчет, что сегодня, фактически используются 2 модели ООП.
Первая - чисто ООПшная модель - используемая в визуальном программировании, где присутствует принцип событийности, немаловажный для ООП, как вид взаимодействия объектов.
Вторая - информационная, как в ПХП, например, где объект в коде программы не отождествляется с каким-то вещественным субъектом, кнопкой и т.п., т.е. носит, фактически, информационный, сугубо механико-рабочий характер. 
Питон, если я не путаю, из того, что я о нем слышал, относится к первой категории.
PM ICQ   Вверх
Daevaorn
Дата 3.8.2007, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 1
Всего: 70



Цитата(Mal Hack @  3.8.2007,  13:52 Найти цитируемый пост)
В догонку. Не знаю как и что в Питоне реализовано, но надо отдавать себе отчет, что сегодня, фактически используются 2 модели ООП.

ну я бы не стал так разделять. В конце концов, что мешает мне реализовать событийную ситему в php. Ничего. Поэтому это  не модели, а лишь способ применения. И зависит от решаемой задачи.
PM MAIL WWW   Вверх
Mal Hack
Дата 3.8.2007, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



Да, разделение - условное. Нов от в PHP вы не можете использовать событийность, связанную с графисечким интерфейсом - раз. Два, любоую событийность, как взаимодействие между объектами, вы должны, в случае PHP, полностью отпрограммировать сами, а в том, первом случае, о чем я писал выше, механизм событий, реализовывается через системное API.
PM ICQ   Вверх
SamDark
Дата 3.8.2007, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


Профиль
Группа: Участник
Сообщений: 1424
Регистрация: 25.7.2006
Где: Voronezh

Репутация: 1
Всего: 38



Mal Hack
Можем мы использовать событийность, связанную с графическим интерфейсом. AJAX нам на что?
Если не хочется программировать событийную модель самостоятельно - можно всегда использовать фреймворк... благо они есть.


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
Daevaorn
Дата 3.8.2007, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 1
Всего: 70



Допустим событийная система реализована в биндингах GUI библиотек для в php, в частности в PHP-GTK. А именно системное API конечно есть, но не так уж и частно встречается, сразу на ум приходит Delphi. Так что я не совем соглашусь, что имеено это делит ООП на модели.
PM MAIL WWW   Вверх
Oflashp
Дата 3.8.2007, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 2.8.2007
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: 2



Цитата(SamDark @ 3.8.2007,  13:17)
Mal Hack
Можем мы использовать событийность, связанную с графическим интерфейсом. AJAX нам на что?
Если не хочется программировать событийную модель самостоятельно - можно всегда использовать фреймворк... благо они есть.

AJAX - JavaScript, который мы моем лишь связать с PHP. Точнее PHP использует не своё средство представления событийности
PM MAIL ICQ   Вверх
vasac
Дата 3.8.2007, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

Репутация: нет
Всего: 36



Присоединюсь к чату smile
Цитата

В JavaScript нет ОО в привычном понимании. т.е. классов и объектов.

В JavaScript есть ОО. Если под привычным пониманием понимается "классориентированная версия ООП, к которой привыкло большинство", то, да, такого нет.
Но объектно-ориентированное программирование, это программирование с ориентированием на объекты smile. На объекты и их взаимодействие. А классы тут не причем.

Цитата

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

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

PM WWW   Вверх
Mal Hack
Дата 3.8.2007, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



Цитата(SamDark @  3.8.2007,  13:17 Найти цитируемый пост)
Можем мы использовать событийность, связанную с графическим интерфейсом. AJAX нам на что?

Событийность имеется ввиду во время работы скрипта, а тот же Ajax просто вызывает скрипт PHP по какому-то действию, а вот внутри PHP событийности нет.

Цитата(Daevaorn @  3.8.2007,  13:18 Найти цитируемый пост)
Допустим событийная система реализована в биндингах GUI библиотек для в php, в частности в PHP-GTK. А именно системное API конечно есть, но не так уж и частно встречается, сразу на ум приходит Delphi. Так что я не совем соглашусь, что имеено это делит ООП на модели. 

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

Цитата(vasac @  3.8.2007,  14:04 Найти цитируемый пост)
На объекты и их взаимодействие. А классы тут не причем.

Без класса нет объекта!!!
JS либо должна в себе содержать внутри определения классов, либо она просто дает синтаксис, близкий к ООП...
PM ICQ   Вверх
vasac
Дата 3.8.2007, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

Репутация: нет
Всего: 36



Цитата

Без класса нет объекта!!!
JS либо должна в себе содержать внутри определения классов, либо она просто дает синтаксис, близкий к ООП... 

А вот и есть smile
Синтаксис она как раз дает далекий от "классического" ООП. Но в том чтобы следовать принципам ООП это ей не мешает.
PM WWW   Вверх
WIPS
Дата 4.8.2007, 01:14 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 22.5.2006
Где: Украина, Киев

Репутация: 1
Всего: 8



Цитата(Fally @  3.8.2007,  09:54 Найти цитируемый пост)
Это - Я-З-Ы-К-И П-Р-О-Г-Р-А-М-М-И-Р-О-В-А-Н-И-Я. Но никак не концепции программирования.

JavaScript я привел как пример концепции прототипного наследования, к тому же в этой концепции нет классов.
Ada95 - пример реализации концепции статической типизации (по умолчанию запрещено наследование).

Цитата(Fally @  3.8.2007,  09:54 Найти цитируемый пост)
2) Под объектом подразумевается некоторая сущность, обладающая состоянием и поведением. Как правило при рассмотрении объектов выделяется, что объект принадлежат одному или нескольким классам, которые в свою очередь определяют поведение объекта. /Википедия/

Потрудитесь почитать собственную ссылку 10 строками ниже и увидите: "...объекты являются экземплярами некоторого заранее описанного класса (однако например в таком языке как JavaScript понятие класс не используется вовсе)..."

Fally, не нервничайте, просто попытайтесь понять о чем говорит собеседник. И не надо такого к-ва заглавных букв, это плохой тон.

Цитата(SamDark @  3.8.2007,  10:29 Найти цитируемый пост)
WIPS, Fally, 
В JavaScript нет ОО в привычном понимании. т.е. классов и объектов. Там совершенно другой принцип, основаный на прототипах. Вот там как раз с натяжкой можно сказать, что "класс сам является объектом", хотя сравнивать прототипное программирование с классическим ОО, а тем более приводить к нему, как многие делают, некорректно.

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

Цитата(Mal Hack @  3.8.2007,  10:43 Найти цитируемый пост)
Цитата(WIPS @  2.8.2007,  23:52 Найти цитируемый пост)
Не всегда. Понятие "класс" для ООП в принципе не является обязательным.

Бред. Яйца без курицы не бывает. Объект нельзя создать без его определения. Другое дело, когда система в программе заранее создает объект по своим прототипам. 

Пожалуйста, не давите меня такими сильными аргументами как "бред" и "яйца без курицы не бывает". В JS объект может определяться во время создания. Причем его как вы выражаетесь "опеределение" может изменяться по ходу выполнения программы. Где здесь бред? Где "система в программе заранее создает объект по своим прототипам"? Давайте не будем опускать довольно мощный язык (и представляемую им концепцию) до уровна onclick="" и getElementById, только потому, что в основном он исп-ся в браузерах.

Цитата(Mal Hack @  3.8.2007,  11:52 Найти цитируемый пост)
Событийность имеется ввиду во время работы скрипта, а тот же Ajax просто вызывает скрипт PHP по какому-то действию, а вот внутри PHP событийности нет.

Событийность таки есть, взять хотя бы сокеты, можно их слушать, можно реагировать на изменение их состояния. 

Цитата(Mal Hack @  3.8.2007,  14:08 Найти цитируемый пост)
Без класса нет объекта!!!
JS либо должна в себе содержать внутри определения классов, либо она просто дает синтаксис, близкий к ООП... 

ООП - это три принципа (наслед-е, инкапсуляция, полиморфизм), надеюсь с этим никто спорить не станет. Все эти 3 принципа реализованы в JS, есть и объекты, но при этом нет классов. Что вы имеете в виду под словами "должна в себе содержать внутри определения классов"? Нет в JS классов ни внутри, ни снаружи, и не нужны они там. Либо у нас с вами разные определения слова "класс"...

--------------------
Автопроизводители, машины, марки, модели!
PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 4.8.2007, 13:32 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



Цитата(WIPS @  4.8.2007,  01:14 Найти цитируемый пост)
Пожалуйста, не давите меня такими сильными аргументами как "бред" и "яйца без курицы не бывает". В JS объект может определяться во время создания. Причем его как вы выражаетесь "опеределение" может изменяться по ходу выполнения программы. Где здесь бред? Где "система в программе заранее создает объект по своим прототипам"? Давайте не будем опускать довольно мощный язык (и представляемую им концепцию) до уровна onclick="" и getElementById, только потому, что в основном он исп-ся в браузерах.

Определение этого класса, так или иначе, должно быть, оно зашито в движок JS.
В противном случае это структура с синтаксисом объектного доступа + изменяемость.

Цитата(WIPS @  4.8.2007,  01:14 Найти цитируемый пост)
Событийность таки есть, взять хотя бы сокеты, можно их слушать, можно реагировать на изменение их состояния. 

Эта событийность реализуется ручками, от и до...

Цитата(WIPS @  4.8.2007,  01:14 Найти цитируемый пост)
ООП - это три принципа (наслед-е, инкапсуляция, полиморфизм), надеюсь с этим никто спорить не станет. 

Я уже писал выше... Удосужтесь еще раз почитать... С точки зрения практической реализации ООП вы правы, но по большому счету - нет.

Цитата(WIPS @  4.8.2007,  01:14 Найти цитируемый пост)
Что вы имеете в виду под словами "должна в себе содержать внутри определения классов"?

Если вы работали в Делфи, то я имею ввиду TObject, определенный в самом языке, а не тот, который определяете вы.

PM ICQ   Вверх
Daevaorn
Дата 4.8.2007, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 1
Всего: 70



Цитата(Mal Hack @  4.8.2007,  14:32 Найти цитируемый пост)

Эта событийность реализуется ручками, от и до...

Приведи пример, где не ручками.
PM MAIL WWW   Вверх
vasac
Дата 4.8.2007, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

Репутация: нет
Всего: 36



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

"Класс", это наследие жесткой типизации, что есть ограничение компилирующих языков (хотя многие скажут, что это благо, а не ограничение). В C++ нужна эта иерархия, чтобы на этапе компиляции преобразовать вызовы функций в переходы на нужный участок памяти. А в PHP уже и не нужно, там наследование классов, просто позволяет более легко строить эти классы. А если нужно вызвать какой-то метод объекта, то важно только само наличие этого метода у объекта, а не принадлежность его какому-то классу.

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

Класс определяет набор однотипных объектов. Однако, уже в PHP это не совсем так. Т.к. как там в начала цепочки поиска ставится сам объект. С учетом того, что в него можно добавлять свойства, а так же устроить перехват несуществующих методов, то все становится не так четко. Объект, в который добавлены новые свойства, уже не совсем объект того класса, от которого наследован, он не до конца подобен другим объектам того же класса.

А в прототипном наследовании нет цепочки классов, там цепочка объектов. Главное отличие - это не абстрактные структуры, а именно объекты с которыми можно работать, как обычно. И в движок не зашито никаких определений классов, там есть предопределенные объекты для конкретных типов, которые можно спокойно изменять.

Преимущества такого подхода (во всяком случае для области применения подобных языков, это преимущества):

- Можно создавать набор похожих, но несколько различных по поведению объектов, не создавая при этом громоздкую иерархию классов и не таская её вместе с программой (очень важно для JS)
- Можно динамически изменять (дополнять) поведение объектов определенного "типа" путем изменения прототипа (для JS с обилием предопределенных объектов и различными реализациями в браузерах, очень полезно)
- Можно динамически изменять иерархию наследования (конкретно в JS нельзя)
- Утиная типизация значительно повышает гибкость. Это не совсем к прототипам, но тоже то, чего нет в "классическом" ООП.

Т.о. "классы", отнюдь не такая необходимая вещь.
PM WWW   Вверх
Mal Hack
Дата 4.8.2007, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



Цитата(Daevaorn @  4.8.2007,  13:38 Найти цитируемый пост)
Приведи пример, где не ручками. 

В PHP такого нет.
В Делфи, к примеру при нажатии на кнопку ты описываешь процедуру, но вот за механизм вызова этой процедуры отвечает система.


PM ICQ   Вверх
Daevaorn
Дата 4.8.2007, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 1
Всего: 70



Цитата(Mal Hack @  4.8.2007,  15:56 Найти цитируемый пост)
но вот за механизм вызова этой процедуры отвечает система.

а система это что? Библиотека VCL, которая тоже написана ручками, которая обработчик нажатия на кнопку и запускает. Другое дело что на самом низком уровне можно забиндить методы на события Windows, но напряму к интерфейсу это не относится. Так что пример половинчатый.

Это сообщение отредактировал(а) Daevaorn - 4.8.2007, 15:08
PM MAIL WWW   Вверх
WIPS
Дата 5.8.2007, 12:09 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 22.5.2006
Где: Украина, Киев

Репутация: 1
Всего: 8



Цитата(Mal Hack @  4.8.2007,  12:32 Найти цитируемый пост)
Определение этого класса, так или иначе, должно быть, оно зашито в движок JS.

Это аксиома? Почему вы так твердо убеждены, что без классов не может быть объектов? С тем, что написал vasacздесь вы тоже не согласны?

Цитата(Mal Hack @  4.8.2007,  12:32 Найти цитируемый пост)
Эта событийность реализуется ручками, от и до...

Если бы эта событийность реализовывалась библиотекой от MS это бы считалось для вас "настоящей" событийностью?

Цитата(Mal Hack @  4.8.2007,  12:32 Найти цитируемый пост)
Если вы работали в Делфи, то я имею ввиду TObject, определенный в самом языке, а не тот, который определяете вы.

Если рассматривать класс чисто как тип данных, то можно сказать, что они есть в JS (это будут классы "number", "string", "boolean", "object", "function", "undefined"). Но следуя этой логике можно сказать, что классы есть в любом языке, в котором хотя бы различаються типы данных число и строка.

Цитата(Mal Hack @  4.8.2007,  12:32 Найти цитируемый пост)
Цитата(WIPS @  4.8.2007,  01:14 Найти цитируемый пост)
ООП - это три принципа (наслед-е, инкапсуляция, полиморфизм), надеюсь с этим никто спорить не станет. 

Я уже писал выше... Удосужтесь еще раз почитать... С точки зрения практической реализации ООП вы правы, но по большому счету - нет.


Пожалуйста в след. раз дайте ссылку на то, что я дожен почитать (перечитывать все страницы в поисках одного поста довольно утомительно), но тем не менее я почитал еще раз и вот что нашел:
Цитата(Mal Hack @  1.8.2007,  21:43 Найти цитируемый пост)
Diesel Draft, основы ооп, это принципы наследования, инкапсуляции и полиморфизма.. Объект - лишь способ реализации ;) 

Цитата(Mal Hack @  2.8.2007,  13:58 Найти цитируемый пост)
Основа - концепция программирования, включающая в себя такие концепции, как полиморфизм, наследование и инкапсляция. 


Вы говорите тоже, что и я... Почему я не прав по "большому счету"? Серьезно, без обид, объясните в чем моя ошибка.

А если вы имели в виду это:
Цитата(Mal Hack @  2.8.2007,  15:08 Найти цитируемый пост)
ООП - теория, концепция создания ПО с использованием таких понятий как класс и объект, где последние два - лишь способ реализации концепции, пускай и другого пока не придумали.
Модуль - программная единица, файл или группа файлов, объединяющий программный код по функциональному и смысловому назначению.
Класс - описание объекта.
Объект - некая программная единица, работа с которой ведется исходя из практический части теории ООП, а точнее, которая имеет такие свойства, как наследование, инкапсуляция и полиморфизм. В данном случае не надо придираться к словам, что наследование относится к классам.. Объект все равно производная класса, так что я говорил о следствии...

Ну вот честно, я не понимаю, что тут сложного для понимая. 

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

--------------------
Автопроизводители, машины, марки, модели!
PM MAIL WWW ICQ Skype   Вверх
WolfON
Дата 5.8.2007, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 604
Регистрация: 19.7.2004

Репутация: нет
Всего: 8



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


WIPS, +1
PM MAIL ICQ   Вверх
Zeroglif
Дата 5.8.2007, 13:47 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: нет
Всего: 66



OOP - общая парадигма, под крышей которой должны сосуществовать разные языки. Приверженцы CBLs (class-based languages) обожают обвешивать общую парадигму своими собственными фишками (только классы, без классов нет ООП вообще и т.п.), что автоматически отрицает существование других объектно-ориентированных языков, в которых просто нет классов, как таковых, тех же PBL (prototype-based languages). Это несеръёзно. PBLs, замечательным представителем которых является тот же javascript или SELF, строят свою концепцию именно на отстутствии какого-либо разграничения "класс-экземпляр", старательно выравнивая объекты.
Цитата

The most important idea of the prototype-based is that concrete objects are only mean to model applications. Prototypes are not meant to be abstractions like classes and are not linked in any other way to other objects that would describe them as in the class-based approach. SELF cannot distinguish those objects playing the role of classes from those playing the role of instances...


PM MAIL WWW   Вверх
Mal Hack
Дата 5.8.2007, 14:21 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



Цитата(WIPS @  5.8.2007,  12:09 Найти цитируемый пост)
Почему вы так твердо убеждены, что без классов не может быть объектов?

Потому что ни одна переменная не может существовать без своего описания, быть не типизированной. 

Цитата(WIPS @  5.8.2007,  12:09 Найти цитируемый пост)
Если бы эта событийность реализовывалась библиотекой от MS это бы считалось для вас "настоящей" событийностью?

Дело не в MS. Я имею ввиду то, что механизм возникновения событий и передача управления обработчкику Вами как программистом уже не программируется, и что этот механизм уже отпрограммирован и находится в системе.

Цитата(WIPS @  5.8.2007,  12:09 Найти цитируемый пост)
Вы говорите тоже, что и я... Почему я не прав по "большому счету"? Серьезно, без обид, объясните в чем моя ошибка.

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

Цитата(WIPS @  5.8.2007,  12:09 Найти цитируемый пост)
Если рассматривать класс чисто как тип данных, то можно сказать, что они есть в JS (это будут классы "number", "string", "boolean", "object", "function", "undefined"). Но следуя этой логике можно сказать, что классы есть в любом языке, в котором хотя бы различаються типы данных число и строка.

А разве класс не тип данных? Да, и в Паскале и в Бэйсике, наверное, есть классы, и в ПХП. Но, позволяются ли классы в паскале, как и в ПХП, полностью использовать мощь ООП? Отюсда и то, небольшое разделение о котором я говорил. Делфи и Паскаль, к примеру. Классы есть и там и там, а вот в каком из них реализуется ООП концепия - как раз тот самый вопрос. ПыСы, мог перепутать наличие классов в Паскале с Сями(С++) в консоли... Очень давно с класическим паскалем не работал.

Цитата(WIPS @  5.8.2007,  12:09 Найти цитируемый пост)
то это ваше личное определение ОПП, которое вы почемуто считаете за аксиому.

Не то, чтобы за аксиому, просто на сегодняшний денья не вижу таких моментов, которые "убивали" бы какие-то мои высказывания.
Так уж получилось, что я расматриваю программирование не только с позиции практики, но и с позиции теории, проектирования, построения моделей, а посему, считаю не правильным отделение теоретических, пусть и небольших, основ от практического применения. Хоть программирование и сугубо практическая вещь, но малая доля теории все же есть. По крайней мере, я хорошо помню, как для меня отличался процесс проектирования программы в консоли (структурне программирование) от визуального (можно сказать объектного)..
Цитата(WIPS @  5.8.2007,  12:09 Найти цитируемый пост)
А о надобности классов в концепции ООП я с вами согласиться не могу, т.к. пока не увидел доказательтсва этого.


Цитата(WIPS @  5.8.2007,  12:09 Найти цитируемый пост)
А о надобности классов в концепции ООП я с вами согласиться не могу, т.к. пока не увидел доказательтсва этого.

В концепции ООП классы и не присутствуют. Классы, как я уже говорил выше - это описание системы, если хотите, объекта, уже в практической части, которые позволяют реализовать эту концепцию.
PM ICQ   Вверх
sTa1kEr
Дата 5.8.2007, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 2
Всего: 146



Цитата(Mal Hack @  5.8.2007,  14:21 Найти цитируемый пост)
Дело не в MS. Я имею ввиду то, что механизм возникновения событий и передача управления обработчкику Вами как программистом уже не программируется, и что этот механизм уже отпрограммирован и находится в системе.

События - это, по сути, всего-лишь коллекция делегатов, вызываемых поочередно. По этому это совершенно не принципиально.
Код

class someClass
{
   public $helloEvent = array();

   public function __construct()
   {
      $this->helloEvent[] = array($this, "someHandler");
   }

   public function hello()
   {
      echo "Hello!\n";
      foreach ($this->helloEvent as $func) call_user_func_array($func, array($this, array("test")));
   }

   public function someHandler($sender, array $args)
   {
      echo "Called someHandler of ".get_class($sender)." with parameters ".var_export($args, true)."\n";
   }
}

function anotherHandler($sender, array $args)
{
   echo "Called anotherHandler of ".get_class($sender)." with parameters ".var_export($args, true)."\n";
}

$a = new someClass();
$a->helloEvent[] = "anotherHandler";
$a->hello();

PM MAIL   Вверх
Mal Hack
Дата 5.8.2007, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



Цитата(sTa1kEr @  5.8.2007,  16:08 Найти цитируемый пост)
События - это, по сути, всего-лишь коллекция делегатов, вызываемых поочередно. По этому это совершенно не принципиально.

Не согласен. События - вид взаимодействия объектов друг с другом или реакции на какие-то внешние воздействия, механизм которых не реализуется самим программистом.
Ты же просто вызвал метод и все.
PM ICQ   Вверх
sTa1kEr
Дата 5.8.2007, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 2
Всего: 146



Цитата(Mal Hack @  5.8.2007,  18:01 Найти цитируемый пост)
События - вид взаимодействия объектов друг с другом или реакции на какие-то внешние воздействия, механизм которых не реализуется самим программистом.

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

Цитата(Mal Hack @  5.8.2007,  18:01 Найти цитируемый пост)
Ты же просто вызвал метод и все. 

Код

foreach ($this->helloEvent as $func) call_user_func_array($func, array($this, array("test")));

Код

this.helloEvent(this, new EventArgs());

Это все отличие на примере C#. Да, в PHP это делается явно, а в C# об этом заботится компилятор, но суть от этого не меняется.
PM MAIL   Вверх
Mal Hack
Дата 5.8.2007, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



Цитата(sTa1kEr @  5.8.2007,  19:12 Найти цитируемый пост)
 Да, в PHP это делается явно, а в C# об этом заботится компилятор

Вот я про это и говорю !!!
Событийность и там событийность, но в 
PM ICQ   Вверх
WIPS
Дата 5.8.2007, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 22.5.2006
Где: Украина, Киев

Репутация: 1
Всего: 8



Цитата(Mal Hack @  5.8.2007,  13:21 Найти цитируемый пост)
Потому что ни одна переменная не может существовать без своего описания, быть не типизированной.

Если рассматривать класс чисто как тип данных, то я с вами соглашусь.

Цитата(Mal Hack @  5.8.2007,  13:21 Найти цитируемый пост)
Потому, что вы видете сразу к практике, забывая о теоретичекой сущности самого ОО подхода. Эти три принципа - те вещи, которые делают ООП именно ООП, но с практической точки зрения. Но они являются лишь следствие объектно-ориентированной концепции, подхода, которая подразумевает под собой определенный вид взаимодействия объектов, определенные этапы разработки и их стадии. И эти три принципа позволяют эту теорию осуществить на практике.

То, что вы называете ООП подходом в проектировании, все таки отличается от ООП подхода в чисто программировании (читай кодинге, или то что вы называте "чисто практической точкой зрения"). Да, при проектировании приложения выделяются сущности (насколько я понял, именно их вы называете классами в этом случае), способы, варианты их взаимодействия и пр.. На основе их в коде появляются классы (если это CBL) или сразу объекты (если это PBL). От бизнес логики приложения никуда не деться, такие "классы" будут в любом приложении.

Цитата(Mal Hack @  5.8.2007,  13:21 Найти цитируемый пост)
ПыСы, мог перепутать наличие классов в Паскале с Сями(С++) в консоли... Очень давно с класическим паскалем не работал.

В паскале есть классы. Только по иронии судьбы для их описания используется ключевое слово "оbject" =)

Цитата(Mal Hack @  5.8.2007,  13:21 Найти цитируемый пост)
По крайней мере, я хорошо помню, как для меня отличался процесс проектирования программы в консоли (структурне программирование) от визуального (можно сказать объектного)..

Не вижу приципиальных отличий в проектировании визуального и консольного приложения... Взять, например виндовый notepad и тот-же vim, логика приложений в принципе одинаковая, в чем разница при проектировании? 

Цитата(Mal Hack @  5.8.2007,  13:21 Найти цитируемый пост)
В концепции ООП классы и не присутствуют. Классы, как я уже говорил выше - это описание системы, если хотите, объекта, уже в практической части, которые позволяют реализовать эту концепцию. 

В таком понимании класс больше походит на интерфейс, т.е. описания возможностей объекта и способов взаим-я с ним.

Цитата(sTa1kEr @  5.8.2007,  18:12 Найти цитируемый пост)
Это все отличие на примере C#. Да, в PHP это делается явно, а в C# об этом заботится компилятор, но суть от этого не меняется. 

sTa1kEr, +1.
--------------------
Автопроизводители, машины, марки, модели!
PM MAIL WWW ICQ Skype   Вверх
SamDark
Дата 6.8.2007, 12:01 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


Профиль
Группа: Участник
Сообщений: 1424
Регистрация: 25.7.2006
Где: Voronezh

Репутация: 1
Всего: 38



Mal Hack
Кстати, в PHP5 есть уже реализованная событийная модель:
http://www.php.net/~helly/php/ext/spl/inte...plObserver.html
http://www.php.net/~helly/php/ext/spl/inte...SplSubject.html

Код

<?php
class MySubject implements SplSubject {
    private $elements;
    
    public function __construct() {
        $this->elements = array();
    }
    
    public function attach( SplObserver $observer ) {
        $this->elements[] = $observer;
    }
    
    public function detach( SplObserver $observer ) {
        // Not implemented here
    }
    
    public function notify() {
        foreach( $this->elements as $obj ) {
            $obj->update( $this );
        }
    }
}

class MyObserver implements SplObserver {
    public function update( SplSubject $subject ) {
        echo "The subject is updating me\n";
    }
}

$subject = new MySubject();
$observer = new MyObserver();
$subject->attach( $observer );
$subject->notify();
?>


Даст нам:
Код

nucleuz:~/Sites/localhost/projects/wiki nucleuz$ php subject.php 
The subject is updating me  



--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
Diesel Draft
Дата 6.8.2007, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

Репутация: -1
Всего: 5



SamDark, +1

Код

  class Event{
  
      private $list = array();
      
      
      
      public function __construct($obj = null, $method = null){
        if(!empty($obj) and !empty($method)){
            $this->add($obj, $method);
        }
      
      }
  
      public function add($obj, $method){
        $this->list[] = array('obj'=>$obj, 'method'=>$method);
      }
      
      public function RemoveAll(){
        $this->list = array();
      }
        






--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
Mal Hack
Дата 6.8.2007, 12:57 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



Цитата(WIPS @  5.8.2007,  23:25 Найти цитируемый пост)
То, что вы называете ООП подходом в проектировании, все таки отличается от ООП подхода в чисто программировании (читай кодинге, или то что вы называте "чисто практической точкой зрения")

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

Цитата(WIPS @  5.8.2007,  23:25 Найти цитируемый пост)
В паскале есть классы. Только по иронии судьбы для их описания используется ключевое слово "оbject" =)

Да, да, вроде так.

Цитата(WIPS @  5.8.2007,  23:25 Найти цитируемый пост)
Не вижу приципиальных отличий в проектировании визуального и консольного приложения... Взять, например виндовый notepad и тот-же vim, логика приложений в принципе одинаковая, в чем разница при проектировании? 

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

Цитата(WIPS @  5.8.2007,  23:25 Найти цитируемый пост)
В таком понимании класс больше походит на интерфейс, т.е. описания возможностей объекта и способов взаим-я с ним.

А разве это не так? Разве классы не дают именно этого?


Цитата(SamDark @  6.8.2007,  12:01 Найти цитируемый пост)
Mal Hack, 
Кстати, в PHP5 есть уже реализованная событийная модель:

Я не говорю, что в ПХП событийности нет. Я говорю, что ее полностью надо самому реализовывать.

PS: а хорошая дискуссия получается  ;)
PM ICQ   Вверх
vasac
Дата 6.8.2007, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

Репутация: нет
Всего: 36



Цитата(Mal Hack @  6.8.2007,  12:57 Найти цитируемый пост)
А разве это не так? Разве классы не дают именно этого?

Оттого, что класс что либо дает, не значит, что это не может быть получено без использования класса.
PM WWW   Вверх
SamDark
Дата 6.8.2007, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


Профиль
Группа: Участник
Сообщений: 1424
Регистрация: 25.7.2006
Где: Voronezh

Репутация: 1
Всего: 38



Mal Hack
Не нравится самому - используем фреймворки.
p.s. на object pascal тоже можно без vcl писать...


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
Mal Hack
Дата 6.8.2007, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



Цитата(SamDark @  6.8.2007,  14:54 Найти цитируемый пост)
Не нравится самому - используем фреймворки.

При чем тут фрэймворки...
Цитата(SamDark @  6.8.2007,  14:54 Найти цитируемый пост)
p.s. на object pascal тоже можно без vcl писать... 

Можно, но опять при чем тут это?
Ты же использует TObject тот же, если надо что-то визуальное сделать.

Цитата(vasac @  6.8.2007,  13:47 Найти цитируемый пост)
Оттого, что класс что либо дает, не значит, что это не может быть получено без использования класса. 

Переменная может быть без своего определения? нет. Другое дело, что она определяется самим языком, а не программистом.
PM ICQ   Вверх
Daevaorn
Дата 6.8.2007, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 1
Всего: 70



Цитата(Mal Hack @  6.8.2007,  16:30 Найти цитируемый пост)
Ты же использует TObject тот же, если надо что-то визуальное сделать.

Складывает впечатление, что для тебя программирование делится на визуальное и не визуальное. Однобоко однако.
PM MAIL WWW   Вверх
Mal Hack
Дата 6.8.2007, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



Цитата(Daevaorn @  6.8.2007,  15:48 Найти цитируемый пост)
Складывает впечатление, что для тебя программирование делится на визуальное и не визуальное. Однобоко однако. 

Далеко не только, тем не менее, такое структурирование - уместно ;)
PM ICQ   Вверх
egao
Дата 6.8.2007, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 6.8.2007

Репутация: нет
Всего: нет



TObject - это не более чем корневой объект фреймворка VCL, который существует не только для дельфей, но и для сей и для пхп.
искать по словам delphy for php - там и события и визуальный редактор и тп плюшки.
на уровне языка никаких событий нет. насколько мне известно на уровне языка события есть только в аспектно-ориентированных языках.

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

и ещё, в пыхе класс фактически является объектом-синглетоном. банально потому, что он умеет хранить в себе данные, то есть ведёт себя как объект.



Это сообщение отредактировал(а) egao - 6.8.2007, 20:42
PM MAIL   Вверх
WIPS
Дата 6.8.2007, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 22.5.2006
Где: Украина, Киев

Репутация: 1
Всего: 8



Цитата(Mal Hack @  6.8.2007,  11:57 Найти цитируемый пост)
Не могу согласиться с тобой. Практика реализует теорию, и иначе быть не может. Да, при проектировании ты смотришь на предметную область, при реализаци уже на программные единицы - объекты, которыми оперируешь, но без первого второго не будет. В это и смылс, имхо, ООП как концепции, которая очень удачно совмещает теорию с практикой в результате чего получаем на практике те возможности, которые имеем.

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

Цитата(Mal Hack @  6.8.2007,  11:57 Найти цитируемый пост)
В консоли, фактически, ты используешь четко структурное программирование, в визуальном, где есть полная событийность, ты уже мыслишь по другому, в том плане, что при структурном ты НЕ можешь куда-либо перескочить, т.е. последовательность действий, отчасти - ограничена, а в визуальном, используя событийность ты в принципе не ограничен в выполнени действий. Т.е. ты видишь работу программы, как общую схему взаимодействия, а не как четкую последовательность действий.

Нет никаких отличий в событийности консольного приложения и визуального. Какая разница, вызывается обрабочик событий по клику мышкой или при нажатии комбинации клавиш?! Да и вобще события не обязательно порождаются пользователем, опять же сокеты, программные и аппаратные прерывания и пр. Извини, но твои аргументы в пользу разделения программ на визуальные и консольные меня совершенно не убедили.

Цитата(Mal Hack @  6.8.2007,  11:57 Найти цитируемый пост)
А разве это не так? Разве классы не дают именно этого?

Дают. Но, что если интерфейс объекта может меняться во время исполнения программы? Тут классы совершенно не годятся.

Цитата(egao @  6.8.2007,  16:19 Найти цитируемый пост)
и не надо отделять Объектно Ориентированное Программирование от собственно программирования и оттаскивать его в сторону проектирования. для проектирования существует uml и иже с ним. для программирования важны объекты и их взаимосвязи.

Согласен.

Цитата(egao @  6.8.2007,  16:19 Найти цитируемый пост)
отсюда вывод: классы - откровенно вредная сущность с которой нужно бороться.

Не согласен. Всякая вещь полезна если ею правильно пользоваться. И классы не исключение. Но и не панацея от всего.

Цитата(egao @  6.8.2007,  16:19 Найти цитируемый пост)
и ещё, в пыхе класс фактически является объектом-синглетоном. банально потому, что он умеет хранить в себе данные, то есть ведёт себя как объект.

Если ты про статические члены класса, то ты прав. Однако в данном случае это идет только на пользу. Кстати, как-то пытался использовать такую возможность в ObjectPascal и не нашел... мож ее там и нет?

--------------------
Автопроизводители, машины, марки, модели!
PM MAIL WWW ICQ Skype   Вверх
SamDark
Дата 7.8.2007, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


Профиль
Группа: Участник
Сообщений: 1424
Регистрация: 25.7.2006
Где: Voronezh

Репутация: 1
Всего: 38



Mal Hack
TObject, как уже было сказано, не более чем корневой объект фреймворка VCL. Это не базовый объект языка.


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
WolfON
Дата 7.8.2007, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 604
Регистрация: 19.7.2004

Репутация: нет
Всего: 8



SamDark
Не VCL единым.
Цитата

TObject — класс предок обсалютно всех классов в языке Delphi.


http://ru.wikipedia.org/wiki/TObject

http://www.delphisources.ru/pages/faq/faq_...Object.php.html


В большинстве языков с элементами ООП применен принцип базового класса - все остальне которые являются его наследником.
А в похапэ такого нет - да это особо и не нужно.

Это сообщение отредактировал(а) WolfON - 7.8.2007, 12:40
PM MAIL ICQ   Вверх
Mal Hack
Дата 7.8.2007, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



Цитата(WIPS @  6.8.2007,  23:12 Найти цитируемый пост)
Да, одно зависит от другого, но не всегда теория прямо проецируется в код.

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

Цитата(WIPS @  6.8.2007,  23:12 Найти цитируемый пост)
Нет никаких отличий в событийности консольного приложения и визуального. Какая разница, вызывается обрабочик событий по клику мышкой или при нажатии комбинации клавиш?! Да и вобще события не обязательно порождаются пользователем, опять же сокеты, программные и аппаратные прерывания и пр. Извини, но твои аргументы в пользу разделения программ на визуальные и консольные меня совершенно не убедили.

Ты не совсем меня понимаешь. Я имею ввиду не вызов события, так сказать, как сам факт его появления - клик мышкой по кнопке, а механизм передачи управления, в зависимости от события, определенному программному коду (методу, функции и т.д.).

Цитата(WIPS @  6.8.2007,  23:12 Найти цитируемый пост)
Дают. Но, что если интерфейс объекта может меняться во время исполнения программы? Тут классы совершенно не годятся.

Да, так, но если честно, не совсем могу себе представить задачу, где бы это было бы необходимо.

Цитата(SamDark @  7.8.2007,  11:03 Найти цитируемый пост)
TObject, как уже было сказано, не более чем корневой объект фреймворка VCL. Это не базовый объект языка. 

Это базовый класс для описания визуальных объектов в среде OP...
PM ICQ   Вверх
Daevaorn
Дата 7.8.2007, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 1
Всего: 70



Цитата(Mal Hack @  7.8.2007,  14:56 Найти цитируемый пост)
Да, так, но если честно, не совсем могу себе представить задачу, где бы это было бы необходимо.

ORM?
Цитата(Mal Hack @  7.8.2007,  14:56 Найти цитируемый пост)
Это базовый класс для описания визуальных объектов в среде OP... 

это базовый класс по умолчанию для любого user-defined класса.
PM MAIL WWW   Вверх
Mal Hack
Дата 7.8.2007, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



Цитата(Daevaorn @  7.8.2007,  14:09 Найти цитируемый пост)
ORM?

я имел ввиду изменение интерфейса объекта во время работы.

Цитата(Daevaorn @  7.8.2007,  14:09 Найти цитируемый пост)
это базовый класс по умолчанию для любого user-defined класса. 

Все поняли что это smile
PM ICQ   Вверх
Daevaorn
Дата 7.8.2007, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 1
Всего: 70



Цитата(Mal Hack @  7.8.2007,  15:16 Найти цитируемый пост)
я имел ввиду изменение интерфейса объекта во время работы.

ну так, интерфйес подстраивается под конкретную модель данных. причем имено во время выполнения, поскольку процесс "подстройки" автоматизирован, а не лежит на плечах программиста
PM MAIL WWW   Вверх
SamDark
Дата 7.8.2007, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


Профиль
Группа: Участник
Сообщений: 1424
Регистрация: 25.7.2006
Где: Voronezh

Репутация: 1
Всего: 38



Daevaorn
Кстати, гадость ещё та т.к. тормознутая из-за дополнительных запросов...


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
Daevaorn
Дата 7.8.2007, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 1
Всего: 70



Цитата(SamDark @  7.8.2007,  15:30 Найти цитируемый пост)
Кстати, гадость ещё та т.к. тормознутая из-за дополнительных запросов... 

да есть такое. но вопрос решаемый, т.е. найти оптимальный вариант можно. а положительные стороны перевешивают эти недостатки.
PM MAIL WWW   Вверх
Mal Hack
Дата 7.8.2007, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



Цитата(Daevaorn @  7.8.2007,  14:20 Найти цитируемый пост)
ну так, интерфйес подстраивается под конкретную модель данных. причем имено во время выполнения, поскольку процесс "подстройки" автоматизирован, а не лежит на плечах программиста 

А на практике где применимо? Мне чисто из любопытсва интересно.
PM ICQ   Вверх
SamDark
Дата 7.8.2007, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


Профиль
Группа: Участник
Сообщений: 1424
Регистрация: 25.7.2006
Где: Voronezh

Репутация: 1
Всего: 38



Mal Hack
На практике применяется обычно несколько другой вид ORM.

См. propel.


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
Daevaorn
Дата 7.8.2007, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 1
Всего: 70



Цитата(Mal Hack @  7.8.2007,  16:17 Найти цитируемый пост)
А на практике где применимо? Мне чисто из любопытсва интересно. 

Ну как же, во всех RAD MVC фреймворках: клонах и не клонах RoR.
PM MAIL WWW   Вверх
Mal Hack
Дата 7.8.2007, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



С фреймворками не работал, к сожалению, либо очень мало и не на PHP...
PM ICQ   Вверх
Fally
Дата 7.8.2007, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 17.8.2006
Где: Dahla

Репутация: нет
Всего: 4



Daevaorn, кстати, меня всё интересует... все хвалят ORM... как я понял, то с его помощью можно и загружать данные из базы в объект. Если я правильно понял, то вопрос: Откуда гарантия что запрос к БД будет оптимальным с точки зрения производительности?


--------------------
Прежде чем задать вопрос на форуме воспользуйтесь поиском.
user posted image
user posted image
PM MAIL   Вверх
Daevaorn
Дата 7.8.2007, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 1
Всего: 70



Цитата(Fally @  7.8.2007,  16:38 Найти цитируемый пост)
Откуда гарантия что запрос к БД будет оптимальным с точки зрения производительности? 

такой гарантии нет. все зависит от авторов ORM библиотеки. благо их щас развелось достаточно много и есть из чего выбрать. но всё равно в нетривиальной ситуации оптимальный запрос напишет только сам человек. поэтому иногда приходится ручками до SQL снисходить. обычно для этого тоже предусмотрены специальные инструменты, которые позволяют даже на основе "ручных" запросов создавать в итоге объекты. Зато ORM очень выручает, когда сложных запросов не много и нужно просто получить список неких объектов без сложных условий. ну и бесплатно получается некая структурность кода
PM MAIL WWW   Вверх
WIPS
Дата 8.8.2007, 00:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 22.5.2006
Где: Украина, Киев

Репутация: 1
Всего: 8



Цитата(Mal Hack @  7.8.2007,  12:56 Найти цитируемый пост)
Согласен, но согласись, в любом случае, практическая реализация в той или иной степени все равно основывается на теоретических понятиях. На них можно и забить, но вот работоспособность, точнее безопасность и оптимальность кода будут большим вопросом стоять.

Согласен, забивать ни на что нельзя. Все потом боками вылезает.

Цитата(Mal Hack @  7.8.2007,  12:56 Найти цитируемый пост)
Ты не совсем меня понимаешь. Я имею ввиду не вызов события, так сказать, как сам факт его появления - клик мышкой по кнопке, а механизм передачи управления, в зависимости от события, определенному программному коду (методу, функции и т.д.).

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


--------------------
Автопроизводители, машины, марки, модели!
PM MAIL WWW ICQ Skype   Вверх
SamDark
Дата 8.8.2007, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


Профиль
Группа: Участник
Сообщений: 1424
Регистрация: 25.7.2006
Где: Voronezh

Репутация: 1
Всего: 38



Mal Hack
Я выше дал ссылку на propel. Наверное зря... штука пугающая. Лучше ORM посмотреть на ezpdo. Там всё проще и без заморочек...


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
Mal Hack
Дата 8.8.2007, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



Цитата(WIPS @  8.8.2007,  00:38 Найти цитируемый пост)
В одном случае этот механизм реализуется ручками, в другом автоматически

Вот я про это отличие и говорю.

SamDark, посмотрю на досуге.
PM ICQ   Вверх
SamDark
Дата 8.8.2007, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


Профиль
Группа: Участник
Сообщений: 1424
Регистрация: 25.7.2006
Где: Voronezh

Репутация: 1
Всего: 38



Цитата
В одном случае этот механизм реализуется ручками, в другом автоматически

Автомат тоже кто-то делал ручками. Что нам мешает один раз сделать и наслаждаться?


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
WIPS
Дата 8.8.2007, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 22.5.2006
Где: Украина, Киев

Репутация: 1
Всего: 8



Цитата(SamDark @  8.8.2007,  12:32 Найти цитируемый пост)
Автомат тоже кто-то делал ручками. Что нам мешает один раз сделать и наслаждаться?

Ничего не мешает. Я с этим и не спорю, а наоборот придерживаюсь этого мнения.
--------------------
Автопроизводители, машины, марки, модели!
PM MAIL WWW ICQ Skype   Вверх
chief39
Дата 31.8.2007, 17:56 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: нет
Всего: 77



Цитата(Mal Hack @  1.8.2007,  11:41 Найти цитируемый пост)
Модуль - это программная единица, куда вынесены куски программного кода, разделенные по смысловой и модульной нагрузке. 

"Чтобы понять рекурсию, надо понять рекурсию" smile))


--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
Diesel Draft
Дата 1.9.2007, 00:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

Репутация: -1
Всего: 5



chief39
+1


--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
CyClon
Дата 28.11.2007, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 3.12.2005

Репутация: нет
Всего: 4



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


--------------------
user posted image
PM   Вверх
cccr85
Дата 13.7.2010, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 13.7.2010

Репутация: нет
Всего: 2



Прочитал данную тему пока только до середины, и внесу свои 5 копеек.

Я программирую на php. Нигде не учился, все сам. И так, что мы имеем.

Что такое класс? Нет это не class myClass {} а это КЛАСС каких либо повторяющихся вещей, предметов и т.д. 
Теперь что такое объект этого класса? Нет это не $Object = new myClass; А это один экземпляр класса. 

К чему я все это? А к тому что например у нас есть программа, которая работает например на компьютере пользователя, в этой программе есть например кнопочки, и практически все кнопочки похожи по своим характеристикам. Разнятся только действиями при клике на нее, надпись на кнопке. В итоге имеем один базовый класс кнопок, и классы которые расширяют базовый и говорят что делать при клике. 

Теперь для того чтобы создать сколько угодно кнопок, достаточно создать объект кнопки примерно так:

$button = new myButton;          // class myButton extends basicButton {
$button->name = 'Моя кнопка';  // Текст на кнопке

$window = new myWindow;
$window->setButton($button);

Все, кнопка отобразилась на окне, красота? Я думаю да. Понятно все? Да. ООП мне нравиться? Да.


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

И таких примеров много!!! Но теперь вернемся к нашему php, я пока для себя нашел только один похожий на примеры выше код.

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

В самом начале темы, говорили, что классы = набор функций заключенных в конструкцию class. Как я уже писал выше, класс это чуть другое.

К сожалению других применений ООП в php я пока не вижу. 

В общем вот что я думаю.

Добавлено через 4 минуты и 20 секунд
Цитата(SamDark @ 3.8.2007,  11:29)
WIPSFally
В JavaScript нет ОО в привычном понимании. т.е. классов и объектов. Там совершенно другой принцип, основаный на прототипах. Вот там как раз с натяжкой можно сказать, что "класс сам является объектом", хотя сравнивать прототипное программирование с классическим ОО, а тем более приводить к нему, как многие делают, некорректно.

Позволю себе не согласиться, например все та же злосчастная кнопка является объектом!!! С ней удобно работать как с объектом. 
PM MAIL   Вверх
youri
Дата 13.7.2010, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 17.4.2004

Репутация: нет
Всего: 16



отличить ООП-код от не-ООП на самом деле очень просто:
1. Берем исходники
2. Ищем полиморфизм
...
PROFIT
т.е. фактически сама задача определяет, будет ли использовано ООП. Нету юнитов - нету меда ;)

по поводу событийности/визуальности... разделение, естественно, имеет место быть. Хорошо, а что важнее событийность или визуальность? Возьмем, например, java/c# в контексте веба. В php событийность - это запросы от сервера, только все объекты умирают от запроса к запросу. В java/c# это не так (насколько я знаю). Т.е. вроде как событийность есть, но нету визуальности...

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

по поводу ПОП... я думаю, что ООП - это продолжение ПОП, т.е. решение достаточно сложной задачи с помощью процедурного языка программирования в результате приведет к ООП-решению, несмотря на отсутствие в языке соответствующего синтаксиса
PM   Вверх
SneG0K
Дата 20.7.2010, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: нет
Всего: 54



ООП - это гламурно smile

PM WWW Skype   Вверх
cccr85
Дата 20.7.2010, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 13.7.2010

Репутация: нет
Всего: 2



А вообще тем кто хочет понять ооп, и тем кто хочет прокачать свой скил в программировании, советую посмотреть в сторону фреймворка. Начать лучше всего с code-igniter изучить его, по ссылке очень хорошая документация, когда читал про него, мне все нравилось, но в последствии многие вещи, я посчитал лишними, и не нужными. После того как изучен кодеигнитер, самое время посмотреть что нибудь повеселее, kohana полностью ООП, HMVC паттерн, и еще много вкусностей. Сейчас сделаю один проект на ней, и пойду изучать yii
PM MAIL   Вверх
NLspieler
Дата 22.7.2010, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 619
Регистрация: 13.10.2008
Где: Берлин

Репутация: нет
Всего: 19



Цитата(youri @  13.7.2010,  15:09 Найти цитируемый пост)
только все объекты умирают от запроса к запросу

Совсем не обязательно все объекты должны умирать.
Объекты-«долгожители»  можно спокойно хранить в массиве $_SESSION
и тогда им уже ничего больше грозить не будет

Отсутствие событийности очень легко обходится при помощи javascript + ajax + php скрипт(ы), которые при разных запросах,
будут производить разные действия, 
например, применять методы к объектам, которые хранятся в $_SESSION

Впрочем, некая событийность есть даже при отсутствии javascript. 
Отправка формы или нажатие на get-ссылку: чем не событие?


PM MAIL   Вверх
youri
Дата 22.7.2010, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 17.4.2004

Репутация: нет
Всего: 16



такое впечатление, что ты, чтобы доказать что в php объекты не умирают, будешь всех их сериализовать/десериализовать в БД. Перечитай тему еще раз. java - это постоянно работающее приложение, которое отвечает на запросы, php - это набор скриптов, которые запускаются в результате запроса. Отсутствие событийности не надо обходить
PM   Вверх
Muerto
Дата 10.9.2010, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1207
Регистрация: 23.9.2006

Репутация: нет
Всего: 4



На самом деле нету Объектное вс процедурное...
это скорее объектное + процедурное вс только объектное...

И здесь выигрывает однозначно объектное + процедурное...

Без самых базовых типов, куда мы денимся... все равно отдельные части всегда будут в процедурном стиле, как бы нам не хотелось...



--------------------
user posted image
PM MAIL   Вверх
bars80080
Дата 10.9.2010, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: нет
Всего: 315



Цитата(Muerto @  10.9.2010,  17:53 Найти цитируемый пост)
это скорее объектное + процедурное вс только объектное...

да ладно. я первый год классами вообще не пользовался
PM MAIL WWW   Вверх
NFL
Дата 20.7.2011, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 5.5.2009

Репутация: нет
Всего: нет



Цитата(bars80080 @  10.9.2010,  19:21 Найти цитируемый пост)
да ладно. я первый год классами вообще не пользовался


Пока мне не довелось столкнуться с MVC (в ZF), я тоже ООП пнименял по минимуму. Теперь уже не представляю, как можно писать без применения ОО-подхода что-то сложнее визитки) smile 
PM MAIL   Вверх
Genn
Дата 8.8.2012, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 7.12.2007
Где: Тамбов

Репутация: нет
Всего: нет



> объектное vs процедурное

хм... исключительно в зависимости от проекта, от сложности и наследуемости объектов в нем
PM MAIL WWW ICQ   Вверх
Gold Dragon
Дата 15.1.2013, 07:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: нет
Всего: 71



Тема древняя и бестолковая  smile Всё хорошо, и то и другое...

Лично я уже всегда использую объектное, процедурное только как "короткие формы" исключительно чтобы сократить код и для наглядности, например чтобы не писать это
Код

LText::_('_KAKOYTO_TEXT');
LConfig::getParam('root');

достаточно сделать пару функций
Код

function _($str){
     LText::_($str);
}
function getParam($str){
     LConfig::getParam($str);
}


Это сообщение отредактировал(а) Gold Dragon - 15.1.2013, 08:03


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
xoptov
Дата 25.1.2013, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 16.2.2008

Репутация: нет
Всего: нет



+1
Я не за "объектное vs процедурное", я за "объектное & процедурное".
PM MAIL   Вверх
Deja_Vu
Дата 1.4.2013, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 15.6.2007
Где: Казань

Репутация: нет
Всего: 2



Бред какой то. Тут большая часть вообще не понимает что такое ООП и с чем его едят.

Вот список вопросов для того, что бы оценить свои силы, в понимании ООП:
  •  Как связаны abstract методы класса и protected?
  •  Должен ли один public метод класса вызывать public метода этого же класса?
  •  В каких случаях можно использовать static методы? Нужны ли они вообще?
  •  Когда нужно использовать TypeHint и передавать объект, а когда нужно передавать сырые извлеченные данные из объекта в параметрах метода?

PM Skype   Вверх
Gold Dragon
Дата 1.4.2013, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: нет
Всего: 71



Цитата(Deja_Vu @  1.4.2013,  11:26 Найти цитируемый пост)
Как связаны abstract методы класса и protected?
 Должен ли один public метод класса вызывать public метода этого же класса?
 В каких случаях можно использовать static методы? Нужны ли они вообще?
 Когда нужно использовать TypeHint и передавать объект, а когда нужно передавать сырые извлеченные данные из объекта в параметрах метода?
вопросы из контрольной?  smile Вот только интересно как по ним оценить знания smile



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
baldina
Дата 1.4.2013, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: нет
Всего: 101



Цитата(Deja_Vu @  1.4.2013,  10:26 Найти цитируемый пост)
Тут большая часть вообще не понимает что такое ООП и с чем его едят

большая часть вообще склонна к непониманию. я только один ценный пост вижу:
Цитата(SneG0K @  20.7.2010,  11:59 Найти цитируемый пост)
ООП - это гламурно

кстати, с чем положено есть гламур?
PM MAIL   Вверх
Deja_Vu
Дата 1.4.2013, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 15.6.2007
Где: Казань

Репутация: нет
Всего: 2



Цитата(Gold Dragon @  1.4.2013,  10:43 Найти цитируемый пост)
вопросы из контрольной?   Вот только интересно как по ним оценить знания  

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


Это сообщение отредактировал(а) Deja_Vu - 1.4.2013, 14:27
PM Skype   Вверх
Gold Dragon
Дата 1.4.2013, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: нет
Всего: 71



Цитата(Deja_Vu @  1.4.2013,  15:25 Найти цитируемый пост)
Если человек не знает ответов на эти вопросы, значит и код его будет доставлять неприятности всей остальной команде.
Из школьной программы я ещё помню как устроена и принципы работы ядреной бомбы.. вот только не умею её делать  smile 



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Deja_Vu
Дата 1.4.2013, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 15.6.2007
Где: Казань

Репутация: нет
Всего: 2



Цитата(Gold Dragon @ 1.4.2013,  14:29)
Цитата(Deja_Vu @  1.4.2013,  15:25 Найти цитируемый пост)
Если человек не знает ответов на эти вопросы, значит и код его будет доставлять неприятности всей остальной команде.
Из школьной программы я ещё помню как устроена и принципы работы ядреной бомбы.. вот только не умею её делать  smile

Не совсем понял иронии.

В принципе у программиста с большим опытом есть уже "чувство" когда и как лучше писать.
Только вот понимать что ты делаешь надо. Иначе мне такие программисты напоминают алхимиков, которые пробовали ингредиенты на вкус для определения, чем они являются.
PM Skype   Вверх
baldina
Дата 1.4.2013, 14:35 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: нет
Всего: 101



а можно узнать
Цитата(Deja_Vu @  1.4.2013,  10:26 Найти цитируемый пост)
Как связаны abstract методы класса и protected?

и как это проявляется
Цитата(Deja_Vu @  1.4.2013,  14:25 Найти цитируемый пост)
в процессе работы с людьми над большими проектами

?

и еще. если Вам удалось раз и навсегда решить
Цитата(Deja_Vu @  1.4.2013,  10:26 Найти цитируемый пост)
Должен ли один public метод класса вызывать public метода этого же класса?

с удовольствием послушаю решение
PM MAIL   Вверх
Gold Dragon
Дата 1.4.2013, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: нет
Всего: 71



Цитата(Deja_Vu @  1.4.2013,  15:34 Найти цитируемый пост)
Не совсем понял иронии.

да вообще иронии нет.. Вот только как знание ответа на вопросы поможет в написании кода... Возьми с десяток проектов с абстрактными классами, всё реализовано но у всех по разному..

Цитата(baldina @  1.4.2013,  15:35 Найти цитируемый пост)
с удовольствием послушаю решение 

а мне больше всего хочется послушать вот по этому, особенно по второй части
Цитата(Deja_Vu @  1.4.2013,  11:26 Найти цитируемый пост)
В каких случаях можно использовать static методы? Нужны ли они вообще?




--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Fortop
Дата 1.4.2013, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: нет
Всего: 42



Цитата(Deja_Vu @  1.4.2013,  10:26 Найти цитируемый пост)
 Как связаны abstract методы класса и protected?

Ну и как они связаны?  smile

Добавлено через 49 секунд
Цитата(Deja_Vu @  1.4.2013,  10:26 Найти цитируемый пост)
 В каких случаях можно использовать static методы? Нужны ли они вообще?

Почему по-умолчанию считается, что их использовать нельзя?  smile 


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
krundetz
Дата 2.4.2013, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

Репутация: нет
Всего: 69



Цитата(Deja_Vu @  1.4.2013,  14:25 Найти цитируемый пост)
Если же человек понимает, тогда "объектное vs процедурное" вообще не стоит, ибо первое создано что бы снизить сложность понимания исходного кода продукта.

а как вообще можно сравнивать эти этапы эволюции программирования? Процедурный подход, предшествовал структурному, а он в свою очередь предшествовал ООП. И все эволюционные этапы направлены именно на облегчение понимание большого объема исходного кода, а следовательно на облегчение его поддержки.
Цитата(Deja_Vu @  1.4.2013,  10:26 Найти цитируемый пост)
Должен ли один public метод класса вызывать public метода этого же класса?

может использовать вместо должен слово может? если вопрос верен, и именно в этом слове подвох то, не должен.
Цитата(Deja_Vu @  1.4.2013,  14:34 Найти цитируемый пост)
Иначе мне такие программисты напоминают алхимиков, которые пробовали ингредиенты на вкус для определения, чем они являются. 

все гораздо хуже, так как у алхимиков были не совершенные методы исследования. Но они были, а у этих и методов исследования нет никаких. Сегодня один такой деятель, пытался решить проблему ограничения времени выполнения скрипта на хостинге в 30 секунд при помощи введения вызова функции sleep(30). Я бы назвал таких людей не желающими смотреть куда тыкают своим пальцем, пусть это будет фекалии или высоковольтные провода.
Цитата(Fortop @  1.4.2013,  16:15 Найти цитируемый пост)
Почему по-умолчанию считается, что их использовать нельзя?

а почему можно?

Это сообщение отредактировал(а) krundetz - 2.4.2013, 15:51


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
baldina
Дата 2.4.2013, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: нет
Всего: 101



Цитата(krundetz @  2.4.2013,  15:50 Найти цитируемый пост)
Цитата(Fortop @  1.4.2013,  16:15 )
Почему по-умолчанию считается, что их использовать нельзя?

а почему можно?

опрос затеять штоли))))
PM MAIL   Вверх
Страницы: (16) [Все] 1 2 3 ... Последняя »
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Избранное | Следующая тема »


 




[ Время генерации скрипта: 1.0251 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.