LINUX.ORG.RU

Что такое ООП

 ,


1

2

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

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

Почему такой, казалось бы простой вопрос не имеет однозначного ответа?

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

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

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

Простой пример. Возьмем подстановочную модель, ака ФП. Центральным объектом данной парадигмы является функция. С точки зрения ООП, функция — это актор. Например, у нас есть функция, которая имеет такой вид sum(1, 2) // 3 Мы могли бы выразить это как-то так

Sum = new Function
Sum.code = a + b
theSum = new Sum 
theSum.setArguments(a: 1, b: 2)
theSum.call

Это некоторая декомпозиция, которая нам показывает, что функция — это просто сахар объекта.

То есть, грубо говоря, если мы берем некоторую полноценную ООП/Акторную семантику, и ограничиваем ее выразительные возможности, мы получаем на выходе другую парадигму. Такие вот дела:)



Последнее исправление: somequest (всего исправлений: 1)
Ответ на: комментарий от somequest

Может ли классовое ООП быть прототипным? — Нет

Если дядя не заложил в язык прототипов, то все, ты обосрался?

нет

теперь слушаю тебя

Да ты и сам все сказал. Сам сделал какое-то нелепое утверждение, сам его опроверг.

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

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

somequest
() автор топика
Ответ на: комментарий от loz

Как он поймет что square? более специфичный чем rectangle??

Так буквально. square? = (and? rectangle? ...).

(and? a b) более специфично чем a и чем b. (or? a b) менее специфично чем a и чем b.

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

я вообще не изучаю языки, я их использую

о как, надо будет тоже попробовать.

идиома «всё есть путь» (e.g. путь к объекту, путь к файлу и URL трактуются платформой одинаково)

вот это не совсем понял, можешь привести пример? что значит трактуются одинаково?

временами посматриваю на Red.System, запускал его на Android-устройстве

у них со дня на день 0.6 намечается с поддержкой гуев.

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

Так буквально. square? = (and? rectangle? ...).

Всмысле он может посмотреть в определение square?? или and? это такой хитрый макрос который запомнит аргументы?

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

или and? это такой хитрый макрос который запомнит аргументы?

and? — это обычная функция, которая возвращает тип. Она слегка оптимизирует свои аргументы (если один аргумент, то вернёт его, если для какого-то есть более специфичный, то выкинет), а затем хранит то, что получилось. В Racket можно указывать структуре свойство, позволяющее использовать эту структуру как функцию (что-то вроде operator()() в C++). Если бы этой возможности не было, то пришлось бы хранить структуру в хэше (ключ — функция), тоже несложно.

(struct and-type (types)  
   #:constructor-name really-make-and-type 
   #:property prop:procedure 
   (lambda (type x) 
     (for/and ([t (in-list (and-type-types type))]) 
       (isa? x t)))) 
monk ★★★★★
()
Ответ на: комментарий от somequest

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

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

я его не изучал. я вообще не изучаю языки, я их использую

Можешь, кста, в ресурс годный натыкать по нему?

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

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

То есть из схожести названий ты сделал этот вывод, как я и предполагал ранее?

Нашел отличия?

Прежде чем находить отличия, неплохо было бы определится есть ли сходства

что тебе не удалось реализовать в языке без прототипного ООП

Давай пока конкретно по твоему высеру. Покажи мне код реализованный с помощью патерна «прототип», на твоей любимой жаве, который реализует следующий функционал

Range




Decade := Object clone do(
   foo := true
   show := getSlot("println")
)

1 to(10) foreach(appendProto(Decade))
3 to(7) foreach(setSlot("show", nil))

1 to(15) foreach(?show)

/* out:
1
2
8
9
10

*/

somequest
() автор топика
Ответ на: комментарий от winlook38

А лучше вот такой

Range




Decade := Object clone do(
   foo := "bar"
   bar := "baz"
   show := method(foo println)
)

1 to(10) foreach(appendProto(Decade))
3 to(7) foreach(setSlot("show", method(bar println)))
4 bar := 1000000

1 to(15) foreach(?show)

/* out:

bar
bar
baz
1000000
baz
baz
baz
bar
bar
bar



*/

somequest
() автор топика
Ответ на: комментарий от loz

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

у них со дня на день 0.6 намечается с поддержкой гуев.

зачем конкретно им GUI я не очень понимаю, но вообще платформа отличная

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

Можешь, кста, в ресурс годный натыкать по нему?

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

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

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

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

Палишься )

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

Это «базар взрослого дяди»? Да ты «паходу» свою письку допередёргал так, что мозги выкипели и прыщи заколосились...

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

Язык, у которого выиграл даже Tcl...

в задачах прототипирования софта Tcl/Tk всасывают практически все современные технологии

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

в задачах прототипирования софта Tcl/Tk всасывают практически все современные технологии

Ты или запятые ставь или ... просто ставь запятые. Не распарсил. Кто кому сливает?

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

Кто кому сливает?

ну. хорошие системы прототипирования GUI-софта - Tcl/Tk, современный Web (HTML + CSS + jQuery), QML, Delphi. средние - Qt. плохие - например, Android, GTK, OpenKODE + OpenGL

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

а че же ты лямбду тогда на себя напялил?

надо было у тебя спросить, что напялить?

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

в задачах прототипирования софта Tcl/Tk

Разве что GUI-софта (да и то за счет Tk). Потому что убожество самого языка просто удивительно.

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

хорошие системы прототипирования GUI-софта - Tcl/Tk

понил. Солидарен полностью. Вообще много на нем что делаю, хоть и получаю лучи ненависти от «секретарш». типа «смотрится как г-но». да и пох.

QML мне кста, тож нравится. Еслиб не привязка в openGL и непонятные глюки на оффтопике, ваще былоб круто. При нокии такой херни не было.

// Ром с кубы подходит к концу. ¡Por todos los diablos!

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

Ребол уделывает скриптовые языки на ура, я уверен что jtooth выбрал Tcl по какой-то своей причине.

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

зачем конкретно им GUI я не очень понимаю

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

loz ★★★★★
()
Последнее исправление: loz (всего исправлений: 1)
Ответ на: комментарий от loz

Именно из-за гуев?

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

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

требую считать меньшим LC и выражать МТ через него.

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

То есть из схожести названий ты сделал этот вывод, как я и предполагал ранее?

Ты ранее предполагал херню. Сейчас тоже.

Прежде чем находить отличия, неплохо было бы определится есть ли сходства

И поэтому ты сейчас пойдешь и почитаешь GoF. Это твое первое домашнее задание.

Покажи мне код

А вот и твое второе домашнее задание. Напомню:

Если дядя не заложил в язык прототипов, то все, ты обосрался?

нет

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

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

Пока не отмоешься от говна, на форум не возвращайся, воняет от монитора. И впредь не путай слова с их знчениями, а то так ненароком член вместо банана хряпнешь.

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

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

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

надоел твой тупняк, заигнорю я тебя, пожалуй.

somequest
() автор топика
Ответ на: комментарий от beastie
int MyClass::operator+(int b)
{ static int a = 0;//<-вот оно
  a+=b;
  return a;
}
anonymous
()
Ответ на: комментарий от beastie

наименьший знаменатель для любого вычислителя — это Машина Тюринга

это как раз и есть тезис, оспариваемый Хьюитом

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

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

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

А ты, верно, еще и православный, да?

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

Есть какие то аргументы посущетсву? Или просто хочешь иметь *свое собственное мнение*? Это сейчас модно среди оффисной публики, тренд так сказать.

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

Обрати внимание на уровень анонимусов, которые сливаются с тобой в научно-популярном экстазе. Твой уровень?

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

Залогинься обратно, а то аноним тебя не простит.

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

Твой уровень

Уровень «мамой клянусь что он мамой клянется»:)

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

Есть какие то аргументы посущетсву?

отсутствие доказательства того, что модель акторов обладает сверхтьюринговской вычислительной мощностью (по причине того, что Хьюит считает математическую логику неприменимой к конкуррентным системам) сойдёт за аргумент?

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

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

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

Твой уровень и правда где то наравне с анонимусом, отписавшимся выше.

Этож ты сам отписался. Стиль то твой. Ай ай ай так анонимусом прикрываться.

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

Хьюитт не *считает*, а доказал, что классическая матлогика непременима к конкурентным системам, только вот какое это имеет отношение к вопросу, совершенно не понятно.

somequest
() автор топика
Ответ на: комментарий от jtootf

Доказательство заключается в том, что представлен алгоритм, который нереализуем на МТ.

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

отсебятину

Хьюит считает математическую логику неприменимой к конкуррентным системам

Therefore mathematical logic can not implement concurrent computation in open systems

no kind of deductive mathematical logic could escape the limitation

что касается доказательства, то приведи его, если оно есть. мне найти не удалось. representation theorem, на которую он кругом ссылается, к вычислительной мощности модели акторов отношения не имеет - она, опять же, о логическом описании модели

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