LINUX.ORG.RU

Вопрос по ООП в CL

 , ,


0

3

Много раз слышал, что в CL очень мощная модель ООП. И вот, когда наконец дошли руки почитать об этом подробней, с удивением обнаружил, что в CL НЕ все есть объект. Тогда непонятно, что же в ней сильного? В смолтоке, джаваскрипте, ио, селфе и во многих других языках все есть объект. А в CL, получается, урезанная модель ООП, близкая к плюсовой? А как с этим, кстати, обстоят дела в схемах?

дошли руки почитать об этом подробней, с удивением обнаружил что в CL НЕ все есть объект.

C точки зрения CLOS все :) Ты что-то не то или читаешь, или домысливаешь.

antares0 ★★★★
()
Последнее исправление: antares0 (всего исправлений: 1)

У меня для тебя две новости:

1) ООП не нужно. Вообще.

2) Скобкота не нужна. Вообще.

anonymous
()
Ответ на: комментарий от antares0

Ну, вот например, в этом треде:

tcl/tk-lor-faq

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

linux-101
() автор топика

Да, там урезанный ооп, в стиле плюсов и жабы, так оно и есть.

anonymous
()
Ответ на: комментарий от Deleted

А где почитать? Там базовые типы являются объектами? Например, строка? Ее можно расширить, отнаследовать от нее? Или, допустим, число? Вот в том треде, на который я давал ссылку, пишут, что конс-ячейка не является объектом. Как это понимать?

linux-101
() автор топика
Ответ на: комментарий от Debasher

Неужто ты не угадал автора?!

Он же вроде практикует ОП на два экрана, а тут всего пара строк. Не подумал даже.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)

Мне в школе не рассказали, поэтому хочу узнать, а зачем накладывать ООП слой на сущности которые не являются проекциями объектов реального мира? Ведь ООП сделано для этого? И почему если это не делается, то ооп «урезанное»?

Debasher ★★★★★
()
Ответ на: комментарий от Debasher

Это какой то странный вопрос. Проекция объектов реального мира — это философия какая то.

Ведь ООП сделано для этого?

Думаю, ООП сделано для успешного решения задач, а не для проекций.

И почему если это не делается, то ооп «урезанное»?

Ну надо же как то называть. Если мы считаем, что в смолтоке оно полноценное, значит это урезанное, а как иначе? Ну читай, ограниченное, или слабое, если так удобней.

linux-101
() автор топика

Поток отборнейшего бреда от великого мастера ООП в тему:

В лиспе(если мы говорим о CL) все есть объект.

Не список, не символ, не атом даже, а «объект». Объект. Cons-яйчека это объект, символ(symbol) это объект, пакет символов(package) это объект, литера(character) это объект, строка это объект, массив(array) это объект, число это объект, состояние ГПСЧ(*random-state*) это объект, функция это объект, метод обобщенной функции(generic function) это объект, комбинатор методов(method-combination) это объект, специализатор методов(specializer) это объект, тред(thread) это объект, процесс(process) это объект, путь(pathname) это объект, спецификация типа это объект(состоящий, как правило из объектов-cons-яйчеек и объектов символов), структура это объект, состояние(condition) это объект(и ошибки(error) и предупреждения(warning), как следствие - тоже), перезапуск(restart) это объект, поток(stream) это объект, таблица считывателя(*readtable*) это объект, класс это объект, и, разумеется, инстанс класса это тоже объект, не говоря уже о его слотах(standard-slot-definition)

anonymous
()
Ответ на: комментарий от linux-101

Проекция объектов реального мира — это философия какая то.

Ну смотри, вот у нас есть «Пользователь», мы создаём класс «User», по идее всем удобно, всем счастливы. А есть абстрактный «один», неужели нам нужно создавать класс Integer?!

Думаю, ООП сделано для успешного решения задач, а не для проекций.

Одно другому наверное не мешает

Ну надо же как то называть.

Мне кажется удобнее называть «фанатичное» и «соответствующее реалиям»

Debasher ★★★★★
()
Ответ на: комментарий от Debasher

Ну смотри, вот у нас есть «Пользователь», мы создаём класс «User», по идее всем удобно, всем счастливы. А есть абстрактный «один», неужели нам нужно создавать класс Integer?!

Знатно напутал. Не абстрактный «один», а «целое число».

vurdalak ★★★★★
()
Ответ на: комментарий от vurdalak

целое число

...т.е. тип данных вроде. а зачем этот тип просто превращать в «объект»? Мне кажется мы не сможем от него наследоваться например, он в мире ооп лишний по идее так-то

Debasher ★★★★★
()
Ответ на: комментарий от Debasher

А есть абстрактный «один», неужели нам нужно создавать класс Integer?!

Да, это удобно для манипуляций объектами самого языка.

Number.prototype.mul=function(){return this*this}
Number.prototype.show=function(){console.log(this.valueOf())}
10..mul().show()
//  100
linux-101
() автор топика
Ответ на: комментарий от Debasher

Мне кажется мы не сможем от него наследоваться например, он в мире ооп лишний по идее так-то

Почему это от него нельзя наследовать?

linux-101
() автор топика

ты опять выходишь на связь, норкоман?

lazyklimm ★★★★★
()
Ответ на: комментарий от Debasher

Тип данных это и есть объект, просто обычно язык это скрывает.

Мне кажется мы не сможем от него наследоваться например

Теоретически можем. Почему бы не отнаследовать Real от Integer, переопределив операции с ним?

vurdalak ★★★★★
()
Ответ на: комментарий от linux-101

Почему это от него нельзя наследовать?

Ну потому что в реализации «один» просто невозможно что-то поменять, кажется

Debasher ★★★★★
()
Ответ на: комментарий от Debasher

Что значит нет профита от ООП, если мы строим свои абстракции средствами ООП и отталкиваясь, при этом, от оснополагающей идеи, что все есть объект?

linux-101
() автор топика
Ответ на: комментарий от vurdalak

Тип данных это и есть объект, просто обычно язык это скрывает.

А зачем он это делает?

Теоретически можем.

А можно пример?

Почему бы не отнаследовать Real от Integer, переопределив операции с ним?

а зачем? В чём профит?

Debasher ★★★★★
()
Ответ на: комментарий от linux-101

Что значит нет профита от ООП, если мы строим свои абстракции средствами ООП и отталкиваясь, при этом, от оснополагающей идеи, что все есть объект?

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

Debasher ★★★★★
()
Ответ на: комментарий от Debasher

А зачем он это делает?

Синтаксический сахар.

А можно пример?

Я же выше приводил.

а зачем? В чём профит?

В том что нам не надо знать, какой у нас тип данных: integer, long, real. У нас есть некоторая эталонная абстракация (например, Number) и методы у неё, с которыми мы работаем.

vurdalak ★★★★★
()

А в CL, получается, урезанная модель ООП, близкая к плюсовой?

Даже если предположить, что это так, тебе-то какое дело? Как-будто ты что-то можешь написать на CL или на «плюсах».

anonymous
()
Ответ на: комментарий от linux-101

Профит в отсутствии дублирования кода.

Так он и без ооп не дублировался бы

Debasher ★★★★★
()

В том древнем треде некто лавсанчик по сути прав, но фанатизм затмевает его разум. А вот некто mv далее расставил все точки над той самой буквой, так что читай тред до конца уж что ли.

staseg ★★★★★
()
Ответ на: комментарий от Debasher

А где в твоём примере абстракция?

Абстракция — это Number. Конкретно 1 — это специализация данной абстракции.

linux-101
() автор топика

в CL очень мощная модель ООП

Всё правильно. Только мощная не от слова «мощь», а от слова «мощи».

CARS ★★★★
()
Ответ на: комментарий от vurdalak

отнаследовать Real от Integer

Это нарушение одного из фундаментальных принципов OOP. Кукаретиков прошу пройти в Википедию.

anonymous
()
Ответ на: комментарий от linux-101

Абстракция — это Number. Конкретно 1 — это специализация данной абстракции.

Только в ограниченном мирке неуча типа тебя.

anonymous
()
Ответ на: комментарий от Debasher

Не надо ничего писать с нуля. Достаточно отнаследовать от Number и специализировать. Этим и отличается полноценное ООП от говна. Писать ничего не надо, пусть секретарши пишут.

linux-101
() автор топика
Ответ на: комментарий от linux-101

Не надо ничего писать с нуля.

Само собой, но я хочу просто посмотреть как оно написано!

Debasher ★★★★★
()
Ответ на: комментарий от linux-101

Какой класс 1? Ты же говорил про класс Integer.

В чём проблема ввести тип данных, единственным значением в котором будет 1?

hateyoufeel ★★★★★
()
Ответ на: комментарий от staseg

В том древнем треде некто лавсанчик по сути прав, но фанатизм затмевает его разум. А вот некто mv далее расставил все точки над той самой буквой, так что читай тред до конца уж что ли.

Ты забыл упомянуть об окончательной расстановке от www_linux_org_ru

Никто не мешает, не выходя из плюсов, написать точно такие же типы как в лиспе, используя последние биты под тайптег. Как мы знаем, от этого получатся тормоза при сдвигах. Будет ли какой от этого профит — не знаю; но так или иначе это сделать можно.

А основная тема была в том, что некий кукарекушка кукарекал о том, что в CL, якобы Ъ-ооп. Именно с этим утверждением его и слили в гавно.

linux-101
() автор топика
Ответ на: комментарий от anonymous

Я синтаксис смоллтока плохо знаю. Лучше словами. Или на JS. Или псевдокодом напиши, мне и правда интересно.

linux-101
() автор топика
Ответ на: комментарий от hateyoufeel

В чём проблема ввести тип данных, единственным значением в котором будет 1?

Нахрена нужен такой класс? Это класс чего? самого себя?

linux-101
() автор топика
Ответ на: комментарий от linux-101

Нахрена нужен такой класс? Это класс чего? самого себя?

Во многих языках (в твоём любимом js, например) null - это отдельный тип с единственным значением.

hateyoufeel ★★★★★
()
Ответ на: комментарий от linux-101

Я синтаксис смоллтока плохо знаю.

А что из смоллтока ты хороша знаешь? Мне надо понимать, на каком уровне приводить пример.

anonymous
()
Ответ на: комментарий от anonymous

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

linux-101
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.