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

Поиск:

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


 




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


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

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