|
|
<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 ... 14 . 15 . >> |
| Посл.отвђт | Сообщенiе |
|
|
Дата: Мар 31, 2004 06:27:42 · Поправил: Quantum q_q Причем здесь повторное использование? Весь мой предыдущий пост имел одну цель - доказать отсутствие тесной связи между ООП и "перегрузкой". Как верно заметил гн. Meyer, "перегрузку" часто ошибочно ассоциируют с повторным использованием кода и независимостью представления, а эти два понятия действительно являются китами ООП. Короче, IMO, "перегрузка" не имеет практической ценности с точки зрения ООП. Не смешивай уровень реализации полиморфизма с уровнем абстракции. Я подозреваю что кроется в этой фразе, но всё-таки попрошу выразиться более развёрнуто (на всякий случай). Перегрузка - одно из воплощений полиморфизма. Не согласен. Приведи пример, когда один код используется для обработки различных данных. Любой "нормальный" полиморфизм именно это и делает (см. мой пример выше). Следует писать различных типов/классов данных. |
|
|
Дата: Мар 31, 2004 11:33:46 Quantum "перегрузку" часто ошибочно ассоциируют с повторным использованием Ни разу не сталкивался с такой ассоциацией. q_q > Не смешивай уровень реализации полиморфизма с уровнем абстракции. Quantum > ... попрошу выразиться более развёрнуто ... q_q > Перегрузка - одно из воплощений полиморфизма. Quantum > Не согласен. Хорошо. Давай определимся с понятиями полиморфизм и повторное использование. Мой вариант: "Полиморфизм в ООП означает возможность применения одноименных методов с одинаковыми или различными наборами параметров в одном классе или в группе классов, связанных отношением наследования. Понятие полиморфизма, в свою очередь, опирается на два других понятия: совместное использование (overloading) и переопределение (overriding). Термин overloading можно перевести как перегрузку ..." "Повторное использование - использование (в тривиальном случае методом при помощи copy-paste) написанного ранее кода." Т.е. абсткакция - это когда на синтаксическом уровне программист обращается к одноименным методам/подпрограммам, а реализация (например на С++) - это когда компилятор генерирует вызов нужной подпрограммы в зависимости от числа и типов параметров. Я думаю, что Meyer имел ввиду, что перегрузка не слабо, а отрицательно влияет на повторное использование. |
|
|
Дата: Мар 31, 2004 14:16:01 2Quantum & q_q: люди, а можно вопрос? Вот смотрите, и абстракцию и полиморфизм и перегрузку - уже придумали, значит они комуто нужны! Вы местами утверждаете что вам они не нужны (может вы просто не умеете их готовить?:), но ведь ктото же ими пользуется, и временами успешно надо заметить! Итак вопрос: "Вы вообще о чем спорите? Чего добиваетесь?" |
|
|
Дата: Мар 31, 2004 14:28:33 JaDS Вы местами утверждаете что вам они не нужны Неправда. Я утверждал, что всему свое место. Вы вообще о чем спорите? Чего добиваетесь? Я пытаюсь найти аргументы доказывающие, что воспользовавшись связкой ассемблер+ООП можно получить результаты, которые окупят затраты на создание этой связки, разработку и сопровождение программного обеспечения создаваемого при ее помощи. |
|
|
Дата: Мар 31, 2004 15:42:00 2q_q: Я пытаюсь найти аргументы доказывающие, что воспользовавшись связкой ассемблер+ООП можно получить результаты, которые окупят затраты на создание этой связки, разработку и сопровождение программного обеспечения создаваемого при ее помощи. Смотри, на текущий момент нет (здесь и далее я буду утверждать только то что знаю, а знаю я мало, так что извиняйте) ни одного крупного комерческого юзер-ориентированного продукта написанного на асме. И этому есть объективные причины, вот эти самые причины и доказывают результативность использования спарки ООП и ассемблера, а именно: 1) Зачастую заказчику нужна скорость разработки, а не быстрота, потребляемые ресурсы и ..., вот тут ООП проявит себя с наилучшей стороны. Само собой что ООП тебе в этом никак не поможет, но он поможет тебе (или комуто другому) написать библиотеку классов, с помощью которой ты сможешь сделать довольно сложный интерфейс практически не утруждаясь (как это сделано в VCL KOL MFC ...), и как следствие тратя на это меньше времени - заказчик будет рад. 2) Продукт написанный на процедурном ассемблере - практически не пригоден для развития. Ты сможешь менять мелочи, а вот чтоб переписать весь интерфейс или всю логику, не затрагивая при этом логику или интерфейс соответственно - дохлый номер, проще всё заново. 3) Отличия такой спарки от ЯВУ - так как ты всё-таки в асме то ты можешь делать всё что хочешь, например определять извратные типы данных, и не менее извратно с ними работать. Ты можешь определять сегменты и тд и тп. Плюс, так как ты пишешь в асме то тебе не надо будет сильно мудрствовать с оптимизацией критических участков, это в ЯВУ приходится делать вставки на ассемблере, а тут никаких вставок, всё и так в асме. Да и библиотека по идее должна быть получше чем библиотеки ЯВУ - хотя это довольно условно. И ещё раз, ВСЁ можно сделать и процедурно, да и без процедур подчас можно обойтись (hello.asm:), ООП - не панацея, это просто, в ОТДЕЛЬНЫХ случаях, очень удобно. Иногда этих отдельных случаев много (например при программировании GUI приложений под винду) иногда мало (написание драйвера под винду). Как я уже говорил тут должна меняться концепция. На текущий момент ситуация такова, что в асме пишут только тогда когда нужны предельная оптимизация или предельный контроль. Причем в основном пишут ради оптимизации. Что будет если появиться ООП - ничего, только возможность писать библиотеки классов. Ладно, а что будет если появются библиотеки классов? - правильно, программы будут писать все кому не поподя, код их будет хуже чем чисто асмовый, НО код их будет (надеюсь) лучше чем код ЯВУ и плюсь в любой момент ты можешь опримизировать любой кусок до какого хочешь уровня. Суммируя всё вышесказанное, я за то чтоб быстро разработать программу (пусть она будет не столь оптимальна), а потом уделить больше времени на разработку/оптимизацию КРИТИЧНЫХ кусков кода. НО если программа критична по своей сути - то никаких (или почти никаких) исходных библиотек, всё ручками, НО опять же не исключенно что в объектах, например я за объектную структуру драйверов (ну или плагинов) - ты скажешь что в фаре она и процедурная работает на ура, а мне кажется что будь она объектной, она бы ещё лучше работала, но заметь никаких исходных кодов, только интерфейс ООП. |
|
|
Дата: Мар 31, 2004 18:07:04 JaDS Зачастую заказчику нужна скорость разработки Я не знаю ни одного заказчика в здравом уме, который бы заказывал на _ассемблере_ и ему была бы не интересна скорость, я также не знаю ни одного программера, которому заказали бы сложную систему и он бы начал ее на асме писать. Будь реалистом, мы не в perfect world живем. Продукт написанный на процедурном ассемблере - практически не пригоден для развития Ты как-то устриц упоминал - намек понятен? У меня есть проекты на процедурном асме объемом >500 кб чистого кода (без макросов, инклудов и пр.) - никаких проблем я не испытываю. Меняю и мелочи, и более глобальные вещи. тут должна меняться концепция. На текущий момент ситуация такова, что в асме пишут только тогда когда нужны предельная оптимизация или предельный контроль Откуда данные? Из "умных" книжек? только возможность писать библиотеки классов а без этого никак? НО код их будет (надеюсь) лучше чем код ЯВУ а ты попробуй написать лучше, чем на, скажем, VC++. И что значит - лучше - меньше и/или быстрее? Не хочешь взяться и написать что-нибудь? Могу идеи подкинуть - под стать твоей концепции тотального перехода на ассеблер с ООП :) А то тут из 8 страниц толку никакого не видно - одни споры беспочвенные. |
|
|
Дата: Мар 31, 2004 20:37:52 masquer одни споры беспочвенные согласен, но мыло то никто не отменял;) |
|
|
Дата: Мар 31, 2004 20:50:36 Я открыл мыло в "О пользователе...", хотя спорить даже по но безрезультатно не очень хочется :) |
|
|
Дата: Мар 31, 2004 21:57:08 q_q Полиморфизм в ООП означает возможность применения одноименных методов с одинаковыми или различными наборами параметров в одном классе или в группе классов, связанных отношением наследования. Это определение "перегрузки", а не полиморфизма. Полиморфизм - понятие гораздо более сложное и даже в книге Meyer'а оно не очень чётко выражено. Повторное использование - использование (в тривиальном случае методом при помощи copy-paste) написанного ранее кода Если через copy-paste, то это уже не ООП. Т.е. абсткакция - это когда на синтаксическом уровне программист обращается к одноименным методам/подпрограммам Это опять "перегрузка", а не абстракция. Абстракция даёт возможность программисту сосредоточиться на вопросе "Что должен делать код?", вместо "Как он это должен делать?". а реализация (например на С++) - это когда компилятор генерирует вызов нужной подпрограммы в зависимости от числа и типов параметров. Совершенно верно! Я думаю, что Meyer имел ввиду, что перегрузка не слабо, а отрицательно влияет на повторное использование. В таком случае перегрузка отрицательно влияет и на ООП вообще, ведь без повторного использования нет ООП по определению. Я бы воздержался от столь радикальных заявлений, но и опровергать я их тоже не буду. JaDS Вы местами утверждаете что вам они не нужны (может вы просто не умеете их готовить?:), но ведь ктото же ими пользуется, и временами успешно надо заметить! Да, все мы узали и юзаем STL, но на C++. Совсем другое дело - асм! Не так давно читал статью на сайте Sun, в которой советуют воздержаться от использования перегрузки методов в midlet'ах для платформы J2ME для экономии памяти. А против абстракции, полиморфизма и повтрного использования я ничего не имею, т.к. ООП опирается на эти понятия. Вы вообще о чем спорите? Чего добиваетесь? А я утверждаю, что никакие затраты не нужны. Любой ассемблер уже имеет всё необходимое для создания ООП-приложений. Продукт написанный на процедурном ассемблере - практически не пригоден для развития. Мой самый большой коммерческий проект на асме - около 180Kb (беру в счёт только *.asm файлы). Его сейчас поддерживают другие программеры и не жалуются. masquer А то тут из 8 страниц толку никакого не видно - одни споры беспочвенные. Кому нужно ООП и асм, тот давно их совмещает :-) Спорить тут особого смысла не вижу. |
|
|
Дата: Мар 31, 2004 22:06:04 ...мда... эта ветка сходится на том, что ООП в ассемблере не очень нужно. Ну ничего страшного - я напишу IDE с ООП просто чтобы скрасить существование и развивать мои бедные мозги, которым уже впору надоел .NET. Как кто-то давеча сказал: "...побольше IDE - разных размеров и возможностей...". |
|
|
Дата: Мар 31, 2004 22:14:54 Quantum Любой ассемблер уже имеет всё необходимое для создания ООП-приложений Разумеется. 100%. Иначе как же ассемблеру скомпилировать то, что ему С++ на вход дал? Конечно. На асме ты все можешь делать своими ручками и это его главная прелесть. И ООП можно ручками реализовать. Через макросы вытащить, vtbl самому написать, самому RTTI сделать и прочую херню, хе, и имена самому манглить. Только вот такое ООП мне уже не нада :) Я не совсем уверен теперь, что хочу нормальное ООП на асме, но ООП, вытащенное через макросы, мне не нужно точно. |
|
|
Дата: Апр 1, 2004 05:26:00 · Поправил: q_q Quantum Полиморфизм - понятие гораздо более сложное Зачем затеваешь дискусию если у тебя нет определения? даже в книге Meyer'а оно не очень чётко выражено Meyer самый авторитетный? Если через copy-paste, то это уже не ООП. Я и не утверждал, что повторное использование - это признак ООП, в ООП оно получило дополнительную привлекательность. JaDS Твои доводы не перевешивают предполагаемые мною затраты. Как ни пессимистично это звучит, я согласен с masquer Будь реалистом. |
|
|
Дата: Апр 1, 2004 07:04:37 q_q Зачем затеваешь дискусию если у тебя нет определения? Интересует моё определение полиморфизма? OK, попытаюсь сформулировать: Полиморфизм - это свойство объектов разных классов проявлять общие черты, в следствии чего все эти объекты подвержены однородному восприятию со стороны клиентского кода. Следует добавить, что в современном ООП полиморфизм распространяется исключительно на объекты классов связанных узами наследования, но это скорее ограничение реализации, чем постулат самой философии ООП. Meyer самый авторитетный? Я это не утверждал. Мы пока ещё только затрагиваем самые основные (тривиальные?) понятия ООП, которые описаны в любой книге по объектам. Meyer - теоретик! Поэтому я решил привести пару цитат из его книги, в которой теория ООП преподносится в очень развёрнутом стиле (хоть и не слишком глубоком, но определённо развёрнутом!). Авторитетов называть не буду, ибо моё сугубо личное мнение авторитетным тоже не назовёшь :-) Я и не утверждал, что повторное использование - это признак ООП Ну и зря, так как это утверждение совершенно правильное. |
|
|
Дата: Апр 1, 2004 08:42:27 Quantum С полиморфизмом понятно. Я толкую этот термин как свойство одного объекта прикидываться разными (типа хамелеона, который настраивается на окружающую среду), а ты - как свойство разных объектов прикидываться одним, imho это больше похоже на наследование, откуда иначе появляются общие черты. Я это не утверждал Как тогда понять даже в книге Meyer'а? Ну и зря, так как это утверждение совершенно правильное. Не совершенно. Потому что повторное использование возможно без ООП, а ООП без него нет. |
|
|
Дата: Апр 1, 2004 09:03:43 q_q С полиморфизмом понятно. Да уж, с полиморфизмом разобрались. Как тогда понять "даже в книге Meyer'а"? Как я уже писал в предыдущем посте, Meyer любит теоретизировать. Поэтому за чёткими определениями в терминологии ООП можно смело обращаться к его творению(ям), но тема полиморфизма является одним из немногих исключений. Ещё у меня под рукой лежит книга by H. Shieldt, с более практическим уклоном, и в ней полиморфизм объясняется на примерах :-) На работе лежит толстенный талмуд (автора точно не помню) по объектам и в нём это определение тоже очень расплывчатое. Поэтому я и написал "даже в книге Meyer'а". Потому что повторное использование возможно без ООП, а ООП без него нет. Полностью согласен. Но это же не противоречит утверждению "повторное использование - это признак ООП", так? |
<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 ... 14 . 15 . >> |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.074 |