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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> объектное vs процедурное, программирование в PHP 
:(
    Опции темы
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   Вверх
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Избранное | Следующая тема »


 




[ Время генерации скрипта: 0.1606 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.