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

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

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

во-первых скомпрометировано всякими плюсами и прочим Г

Всегда забавно наблюдать за школиём, которое ничего не знает ни про плюсы, ни про другое Г, а видело говно JS, да и то на картинках и в своих фантазиях, но мнение имеет.

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

А что это? Гуглится только гай стил.

https://github.com/Kalimehtar/gls

В любом случае без иерархии типов (классов) и специализации по ним смысла в такой штуке не много.

(defgeneric foo)

(add-method
 foo
 (method ((x (and? integer? even?)))
	 (cl-format #t "foo on even int, (~a)~%" x)))

(add-method
 foo
 (method ((x integer?))
	 (cl-format #t "foo on not even int, (~a)~%" x)))

(add-method
 foo
 (method ((x (const #t)))
	 (cl-format #t "foo on something else. (~a)~%" x)))

(foo 1) ; "foo on not even int, (1)"
(foo 2) ; "foo on even int, (2)"
(foo "ok") ; "foo on something else, (ok)"

and? и or? задают иерархию.

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

А мне похрену на сорта, я знаю одно — если в языке не все есть объект — он Г, если в нем не полностью динамическая диспетчеризация и типизация, он Г в квадрате, и уж тем более говорить, что там есть какое-то там ООП смешно, а больше мне знать ничего не нужно.

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

типичный такой «Не читал, но осуждаю».

Твой Io и JS - это все-го лишь надстройка над Си, в котором вообще нет ничего. То есть никто не мешает взять Си и накидать на нем объекты и что необходимо. Но криворуким с сухими мозгами вроде тебя этого не понять никак. А все почему? А потому что мозг у тебя не умеет думать широко, он умеет «думать» только в тех рамках, в которых тебе позволили. Этим и отличаются программисты (которые пишут Io и Js) и макаки, который этот io и js пользуют. Все просто.

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

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

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

надстройка над Си

Ага, а то что си всего лишь надстройка над асмом, например, или то, что язык и его реализация — это разные вещи, может вызвать сегфолт у таких гениев от программирования как ты, так что я лучше не буду об этом, грустном, оставайся в своей сказке.

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

Io и JS - это все-го лишь надстройка над Си

который всего лишь надстройка над ассемблером

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

Этим и отличаются инженеры (которые разрабатывают компьютеры) и макаки, который на них программируют. Все просто.

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

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

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

Ага, а то что си всего лишь надстройка над асмом,

Именно. И все твое ООП 1:1 повторяются на ассемблере, где «нет никакого ООП», все твои сигналы и диспетчеры. А потом это выражается во вполне законченной железке.

сегфолт у таких гениев

У криворуких макак, вроде тебя, ты хотел сказать?

Много в IO видел сегфолтов, курица?

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

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

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

Именно. И все твое ООП 1:1 повторяются на ассемблере, где «нет никакого ООП», все твои сигналы и диспетчеры. А потом это выражается во вполне законченной железке.

Лол, и что? что доказать то хотел? Что ты ебешься с сегфолтами и мемликами, в то время как другие выкатывают очередной проект в продакшн?

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

Я тебе больше скажу, и асма никакого нет, и машкодов нет.

В этом и был посыл, дятлик. Неужто до тебя вдруг доходить начало (да не, не верю)! Когда ты кудахчешь про то, что «в Х нет никакого ООП» это значит что ты НИХЕРА не понимаешь ни в ООП ни вообще ни в чем. Потому что или ООП нет вообще или ООП есть везде и реализуем хоть на крестах, хоть на любом другом Г. Другое дело, что реализовать САМ ты этого не умеешь (ну умишко же слабый, дядя Декорте подачку в виде Iо кинул, ты и рад)

В тех же крестах (в питоне, яве, ди, ...) вполне можно описать класс, экземпляры которого будут вести себя как Object из Io, можно добавить мапу со слотами, добавить клон и добавление протототипа из других таких же объектов, добавить ... впрочем добавить там можно что угодно... Все это можно будет менять рантайм и ... внезапно мы уже имеем реализацию io но в рамках «другого Г». А теперь вопрос. Где кончилось НЕ ООП и началось ООП?

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

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

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

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

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

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

Где кончилось НЕ ООП и началось ООП?

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

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

and? и or? задают иерархию.

а типы где? как мне сделать тип фигура, потом прямоугольник, потом квадрат?

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

Ты меня с кем-то путаешь. Наверное с голосами в твоей голове.

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

Во там и кончилось, в моменте реализации где то

где-то это ОЧЕНЬ ОЧЕНЬ грамотный ответ ОЧЕНЬ ОЧЕНЬ грамотного программиста. лол.

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

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

Ффффааакккк... Специально для тебя древнючие GoF описали шаблон проектирования Прототип, а прототипное ООП - это реализованный на уровне языка шаблон проектирования. Если дядя не заложил в язык прототипов, то все, ты обосрался? И как ты с таким подходом занимаешься разработкой ПО? Ой, я забыл, ты же не разрабатываешь ПО, ты философствуешь на ЛОРе и дрочишь вприсядку на Ъ.

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

на питоне с опенЖЛ

так ведь это же не Ъ. Надо было посоветовать реализовать все на сишечке, начиная от системы ввода-вывода. Зачем они кривое говно то взяли? Надстройки над сишкой? Твой косяк.

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

Ты кукарекал, что в питоне тоже не ООП. Так что все честно. троечники пишут на питоне, «тру-гуру-ооп анонiмус» пишет на io. только..Oh shh...обосрался то «тру-гуру-ооп анонiмус» а не студенты, которые клали болт на учебу и на все остальное.

И про Си ты посыла не понял, дитятко. Брысь под мамкину юбку, она тебе петушка даст на палочке.

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

А ты малышь думаешь значит, что паттерн прототип имеет какое-то отношение к прототипному ООП? У ти мой маленький:)

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

Мне так стыдно, прости меня пожалуйста, я больше не буду.

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

а типы где? как мне сделать тип фигура, потом прямоугольник, потом квадрат?

(struct figure)

(struct rectangle figure (width height))

(define square? 
  (and? rectangle 
        (lambda (rect) (= (rectangle-width rect)
                          (rectangle-height rect))))

(defgeneric foo
  (method ((x figure?)) ...)
  (method ((x rectangle?)) ...)
  (method ((x square?)) ...))
monk ★★★★★
()
Ответ на: комментарий от monk

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

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

С Вашего позволения, я повторю вопрос, так как Вы, вероятно? сейчас отвечали на вопрос голосов в Вашей голове

А ты малышь думаешь значит, что паттерн прототип имеет какое-то отношение к прототипному ООП? У ти мой маленький:)

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

А в каком смысле «он станет квадратом»? Можно всегда создать какой то предикат, скажем


is3symbols := method(string, string size == 3)

is3symbols("foo") // -- > true

И что у нас теперь появился тип 3symbols? Какое это отношение имеет к типам?

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

С Вашего позволения, я повторю вопрос

Нет, сначала ты ответишь на заданные тебе вопросы:

Если дядя не заложил в язык прототипов, то все, ты обосрался?
И как ты с таким подходом занимаешься разработкой ПО?

А потом пойдешь читать попсовый GoF прежде, чем задавать вопросы.

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

Посмотри на его код. Если передать в foo прямоугольник с равными сторонами, (и каким-то, пока непонятным мне образом система поймет что сработать должен последний кейз), то метод foo сработает как для квадрата.

И что у нас теперь появился тип 3symbols? Какое это отношение имеет к типам?

А что такое тип, как не набор операций на нем? :) А тут над типом square есть операция foo, и можно написать еще кучу других. Так что это и будет именно тип квадрат, а прямоугольник и square? - лишь детали реализации.

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

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

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

а зачем мне попсовы гоф?

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

Чтобы потом такой же бред как Вы нести?

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

Путать паттерны с реализциями ООП?

Паттерны требуют реализации, это не готовый код для копипаста, а ООП и есть паттерн в широком смысле слова (набор паттернов, схема взаимодействия паттернов). А GoF, для твоего сведения, имеет заголовок «Приемы объектно-ориентированного проектирования». Паттерн Прототип описан в книге, т.к. он не заложен в сам язык, на котором авторы приводят примеры, а паттерны наследование и полиморфизм - не описаны, т.к. они реализованы в языке и авторы на это указывают.

Какой от этого профит, например?

Тебе никакой, ты не занимаешься разработкой ПО.

winlook38 ★★
()

я полез искать статью, о которой ты говорил, в которой Хьюит реализует лямбда-счисление на акторах, и обнаружил чудное. идеи, которые ты толкаешь - это идеи Хьюита; аргументы, которые ты приводишь - это аргументы Хьюита. даже стиль твоего общения на ЛОРе практически один в один повторяет его стиль на LtU. понятно, почему твои рассуждения о теоретико-категориальном подходе настолько дилетантские - потому что Хьюит ничего о категориях не знает и не пишет

что касается вычислительной мощности модели акторов, то вопрос, в общем-то, открыт

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

Я уже понял, что у тебя паттерн головного мозга, но вопрос остается открытым. Какое отношени паттерн Прототип, имеет к прототипной реализации ООП? Слова похожи, или что? Почему ты так решил? Или сказал кто-то это тебе? Как это с тобой получилось, расскажи, интересно же всем.

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

То есть, по той же логике получается, что у тебя тоже их нет? Они затерлись теокатом? Или для адептов логика вообще — нечто чуждое и противоестественное?

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

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

Я уже понял, что у тебя паттерн головного мозга

Нет, ты не понял. Вечно тебе кажется, что ты что-то понял.

вопрос остается открытым

Потому что такую банальную вещь, как GoF не осилил.

Какое отношени паттерн Прототип, имеет к прототипной реализации ООП?

Этот вопрос имеет отношение к разработке ПО, а ты и твоя философия - нет, так что не заморачивайся.

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

Почему изучал его? Применил ли для чего-то? Насколько реально и выгодно использовать подход с этими блоками кода? То же самое про встраиваемые DSL'и?

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

Этот вопрос имеет отношение к разработке ПО

И все таки? Или ты соскочить хочешь? Если хочешь — то так и скажи, я ведь добрый, сильно обсирать не буду.

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

тот редкий случай, когда хочется сказать (не к ночи будь помянут): царя на тебя нет )

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

Почему изучал его?

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

Применил ли для чего-то?

делал выбор между REBOL и Tcl/Tk, выиграл последний. временами посматриваю на Red.System, запускал его на Android-устройстве

Насколько реально и выгодно использовать подход с этими блоками кода?

реально

То же самое про встраиваемые DSL'и?

две ключевых фишки REBOL - eDSL'и (пишутся очень легко и удобно, каждый файл в проекте может быть написан на своём диалекте языка) и идиома «всё есть путь» (e.g. путь к объекту, путь к файлу и URL трактуются платформой одинаково)

в общем и целом, REBOL - отличный язык прототипирования со своей GUI-библиотекой и интересной идеологией. в больших проектах (так же как и Tcl) лучше не применять из-за большой гибкости

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