Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Флейм > Просто интересно, как это - без ООП?


Автор: sidiakin 12.8.2013, 22:17
Вот появился новый яп GO и там нет поддержки ООП. Этож получается что ООП себя не оправдало?

Автор: irinazanuda 13.8.2013, 09:50
Цитата(sidiakin @  12.8.2013,  22:17 Найти цитируемый пост)
Этож получается что ООП себя не оправдало? 

У гламурной, великовозрастной, но "косящей под лолитку" и оттого слегка шепелявящей поэтессы, берут интервью:
- А муза у вас есть?
- Ох, - вздыхает поэтесса, - а муза у меня нет...
Добавляет, после слезливой паузы:
- Вот такая в зизни зопа!

Автор: CompWorm 14.8.2013, 02:34
Цитата(sidiakin @  12.8.2013,  22:17 Найти цитируемый пост)
Этож получается ... ? 

посерчай по форуму, уже обсуждалось, что ООП - это лишь инструмент, при том не всегда нужный. 
например (Мне) чисто математические задачи удобно решать без ООП.
если верит твоим словам, то видимо конкретно в ГО он не нашел применения.

Автор: ТарасАтавин 11.9.2013, 20:24
ООП - парадигма. Не всегда нужная, но часто необходимая.

Автор: Wowa 24.9.2013, 18:36
Не для всех целей ООП нужно.

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

Автор: CompWorm 9.10.2013, 03:16
ТарасАтавин, повторюшка дядя хрюшка smile 

Автор: k0rvin 9.10.2013, 15:07
Цитата(sidiakin @  12.8.2013,  22:17 Найти цитируемый пост)
яп GO и там нет поддержки ООП


А на самом деле: http://golang.org/doc/faq#Is_Go_an_object-oriented_language

Автор: Bulat 25.10.2013, 10:56
Цитата(sidiakin @  12.8.2013,  22:17 Найти цитируемый пост)
Вот появился новый яп GO и там нет поддержки ООП. Этож получается что ООП себя не оправдало? 

Разработчки Erlang: "What is OOP?".  smile 

Автор: ТарасАтавин 6.12.2013, 06:35
Объясните мне, каким боком прикрутить ООП, например, к прологу, эрлангу, или к сиквелу? Или как исключить ООП из умл?

Автор: Bulat 6.12.2013, 07:19
Цитата(ТарасАтавин @  6.12.2013,  06:35 Найти цитируемый пост)
Объясните мне, каким боком прикрутить ООП, например, к прологу, эрлангу, или к сиквелу?

К эрлангу точно никак. Там просто нет такого понятия - переменная. Декларативное программирование.

Автор: ТарасАтавин 6.12.2013, 08:15
Вика утверждает, что функциональное. А декларативное - это пролог.

Автор: Bulat 6.12.2013, 08:49
Цитата(ТарасАтавин @  6.12.2013,  08:15 Найти цитируемый пост)
функциональное

это подмножество, множества, которое называется
Цитата(ТарасАтавин @  6.12.2013,  08:15 Найти цитируемый пост)
декларативное


Есть парадигма, которая называется - декларативное программирование.

В нее входит и функциональное и логическое программирование(пролог)  smile 

Автор: k0rvin 9.12.2013, 12:47
Цитата(Bulat @  6.12.2013,  07:19 Найти цитируемый пост)
К эрлангу точно никак.

Это смотря http://www.infoq.com/interviews/johnson-armstrong-oop
Скрытый текст

 3. Is Erlang object oriented?

Joe Armstrong: Smalltalk got a lot of the things right. So if your question is about what I think about object oriented programming, I sort of changed my mind over that. I wrote a an article, a blog thing, years ago - Why object oriented programming is silly. I mainly wanted to provoke people with it. They had a quite interesting response to that and I managed to annoy a lot of people, which was part of the intention actually. I started wondering about what object oriented programming was and I thought Erlang wasn't object oriented, it was a functional programming language.

Then, my thesis supervisor said "But you're wrong, Erlang is extremely object oriented". He said object oriented languages aren't object oriented. I might think, though I'm not quite sure if I believe this or not, but Erlang might be the only object oriented language because the 3 tenets of object oriented programming are that it's based on message passing, that you have isolation between objects and have polymorphism.

Alan Kay himself wrote this famous thing and said "The notion of object oriented programming is completely misunderstood. It's not about objects and classes, it's all about messages". He wrote that and he said that the initial reaction to object oriented programming was to overemphasize the classes and methods and under emphasize the messages and if we talk much more about messages then it would be a lot nicer. The original Smalltalk was always talking about objects and you sent messages to them and they responded by sending messages back.

But you don't really do that and you don't really have isolation which is one of the problems. Dan Ingalls said yesterday (I thought it was very nice) about messaging that once you got messaging, you don't have to care where the message came from. You don't really have to care, the runtime system has to organize the delivery of the message, we don't have to care about how it's processed. It sort of decouples the sender and the receiver in this kind of mutual way. That's why I love messaging.

The 3 things that object oriented programming has it's messaging, which is possibly the most important thing. The next thing is isolation and that's what I talked about earlier, that my program shouldn't crash your program, if the 2 things are isolated, then any mistakes I make in my program will not crash your program. This is certainly not true with Java. You cannot take 2 Java applications, bung them in the JVM and one of them still halts the machine and the other one will halt as well. You can crash somebody else's application, so they are not isolated.

The third thing you want is polymorphism. Polymorphism is especially regarding messaging, that's just there for the programmer's convenience. It's very nice to have for all objects or all processes or whatever you call them, to have a printMe method - "Go print yourself" and then they print themselves. That's because the programmers, if they all got different names, the programmer is never going to remember this, so it's a polymorphism. It just means "OK, all objects have a printMe method. All objects have a what's your size method or introspection method."

Erlang has got all these things. It's got isolation, it's got polymorphism and it's got pure messaging. From that point of view, we might say it's the only object oriented language and perhaps I was a bit premature in saying that object oriented languages are about. You can try it and see it for yourself.

Ralph Johnson: The thing about Erlang is that it's in some sense 2 languages, at least you program it 2 levels because one is the functional language that you use to write a single process and then there is what you think about all these processes and how do they interact, one process is sending messages to the other. At a higher level, that Erlang is object oriented, at the lowest level it's a pure functional language and that's how it got advertised for a long time.

At a higher level, when you are looking at it more from an architectural and high level design it is quite object oriented. I think you are redefining isolationism. It's all running on one computer and if one process goes wild, it hogs the processor. I think they look more like the importance of garbage collection so that you don't have to make sure that you agree on how you're releasing things. The only way in Smalltalk to interact with an object is send it a message, but the issue is what message do you have. It's the same thing in Erlang.

If you allow a huge number of messages that allow, return all the values of your local variables and that everybody's send you messages and you'll set the values of your local messages, if you did something like that, you'd basically lose a lot of the value of the isolationism. That's why you have to design things properly. The language offers some mechanism.

Joe Armstrong: It's useful when we've got million core computers.


Цитата(Bulat @  6.12.2013,  07:19 Найти цитируемый пост)
Там просто нет такого понятия - переменная.

Это https://gist.github.com/mwotton/6862813. =)
Скрытый текст

Код

%% Server that echos all msgs to console.
-module(echo).
-export([start/0, print/1, stop/0]).

%% API
start() ->
    register(?MODULE, spawn(fun loop1/0)),
    ok.

stop() ->
    ?MODULE ! stop,
    ok.

print(Msg) ->
    ?MODULE ! {print, Msg},
    ok.


loop1() ->
    loop(0).

%% Impl
loop(N) ->
    receive
        {print, Msg} ->
            io:format("~w ~p~n", [N, Msg]),
            loop(N+1);
        stop ->
            ok
    end.

Код

10> c(echo).
{ok,echo}
11> echo:start()
11> .
ok
12> echo:print(hi).
0 hi
ok
13> echo:print(hi).
1 hi
ok
14> echo:print(hi).
2 hi
ok
15> 


Автор: Bulat 9.12.2013, 13:07
Цитата(k0rvin @  9.12.2013,  12:47 Найти цитируемый пост)
Это смотря как посмотреть.

Мне довелось маленько пописать на эрланге, а не только смотреть. =) А полиморфизм был и "до ООП". Можно взять любой процедурный ЯП и своими силами реализовать.

Цитата(k0rvin @  9.12.2013,  12:47 Найти цитируемый пост)
Это не мешает.

И как же пример, типа межпроцессового взаимодействия, раскрывает ООП??

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

А вообще, отсутствие именно такого понятия как переменная иногда о-о-очень мешает, вот там классы, объекты - не так, а перемнная все же бывает нужна.  smile 

Автор: CompWorm 9.12.2013, 20:02
Цитата(ТарасАтавин @  6.12.2013,  06:35 Найти цитируемый пост)
или к сиквелу? 

select DB.table ...
SQL  не ООП? 

Автор: k0rvin 10.12.2013, 13:12
Цитата(Bulat @  9.12.2013,  13:07 Найти цитируемый пост)
Мне довелось маленько пописать на эрланге, а не только смотреть. =) А полиморфизм был и "до ООП". Можно взять любой процедурный ЯП и своими силами реализовать.

Цитата
Erlang has got all these things. It's got isolation, it's got polymorphism and it's got pure messaging. From that point of view, we might say it's the only object oriented language and perhaps I was a bit premature in saying that object oriented languages are about. You can try it and see it for yourself.

Я выделил главное.

Цитата(Bulat @  9.12.2013,  13:07 Найти цитируемый пост)
И как же пример, типа межпроцессового взаимодействия, раскрывает ООП??

Этот пример не о межпроцессном взаимодействии, а об изменении внутреннего состояния процесса: переменная N меняет свое значение после обработки каждого поступившего сообщения. Поскольку обмен сообщениями считается ключевым в ООП по Кею, а в Эрланге этот обмен присутствует в избытке, получаем, что Эрланг вполне себе объектно-ориентирован "искаробки".

Автор: Bulat 10.12.2013, 14:05
Цитата(k0rvin @  10.12.2013,  13:12 Найти цитируемый пост)
Я выделил главное.

Ты просто выдернул из контекста наиболее подходящие строки и манипулируешь ими так, как тебе удобно  smile 

Ключевые черты ООП:
1. Инкапсуляция
2. Наследование
3. Полиморфизм

Вот попробуй реализовать наследование в ерланге.  smile 

Цитата(k0rvin @  10.12.2013,  13:12 Найти цитируемый пост)
Поскольку обмен сообщениями считается ключевым в ООП по Кею

Опять же выдернул из контекста, а как насчет того, что потому же Кею - Все является объектом??

Автор: k0rvin 11.12.2013, 08:22
Цитата(Bulat @  10.12.2013,  14:05 Найти цитируемый пост)
Ключевые черты ООП:

Это не ключевые черты, а механизмы, присутствующие в некоторых реализациях. Ну да ладно.

Цитата(Bulat @  10.12.2013,  14:05 Найти цитируемый пост)
1. Инкапсуляция

Модули. В приведенном примере "клиент" не может получить доступа к N.

Цитата(Bulat @  10.12.2013,  14:05 Найти цитируемый пост)
2. Наследование

Делегирование. Да и вообще http://en.wikipedia.org/wiki/Object-oriented_programming#Formal_semantics.

Цитата(Bulat @  10.12.2013,  14:05 Найти цитируемый пост)
3. Полиморфизм

Что мне мешает посылать одинаковые сообщения разным (по реализации) процессам и получать разное поведение? Ничего.
Скрытый текст

Код

%% Server that echos all msgs to console.
-module(add).
-export([start/0, print/1, stop/0]).

%% API
...

loop1() ->
    loop(0).

%% Impl
loop(N) ->
    receive
        {print, Msg} ->
            io:format("~w ~p~n", [N, Msg]),
            loop(N+1);
        stop ->
            ok
    end.


Код

%% Server that echos all msgs to console.
-module(mul).
-export([start/0, print/1, stop/0]).

%% API
...

loop1() ->
    loop(1).

%% Impl
loop(N) ->
    receive
        {print, Msg} ->
            io:format("~w ~p~n", [N, Msg]),
            loop(N*2);
        stop ->
            ok
    end.



Код

> c(add).
  {ok,add}
> c(mul).
  {ok,mul}
> add:start().
  ok
> mul:start().
  ok
> add ! {print, "Hello"}.
  1 "Hello"
  {print,"Hello"}
> add ! {print, "Hello"}.
  2 "Hello"
  {print,"Hello"}
> mul ! {print, "Hello"}.
  1 "Hello"
  {print,"Hello"}
> mul ! {print, "Hello"}.
  2 "Hello"
  {print,"Hello"}
> mul ! {print, "Hello"}.
  4 "Hello"
  {print,"Hello"}
> add ! {print, "Hello"}.
  3 "Hello"
  {print,"Hello"}
> M = {print, "Hello"}.
  {print,"Hello"}
> add ! M.
  4 "Hello"
  {print,"Hello"}
> add ! M.
  5 "Hello"
  {print,"Hello"}
> mul ! M.
  8 "Hello"
  {print,"Hello"}
> mul ! M.
  16 "Hello"
  {print,"Hello"}



Цитата(Bulat @  10.12.2013,  14:05 Найти цитируемый пост)
а как насчет того, что потому же Кею - Все является объектом?

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

Автор: Bulat 11.12.2013, 10:08
Цитата(k0rvin @  11.12.2013,  08:22 Найти цитируемый пост)
нет такого языка, где все является объектом

Таким образом мы получаем, что и эрланг не язык ООП. Так об чем тогда речь?? smile 

Автор: ksnk 11.12.2013, 10:33
k0rvin, А С++ есть обмен сообщениями? Прям из коробки? Без всяких осовских API.


Автор: k0rvin 11.12.2013, 10:45
Цитата(ksnk @  11.12.2013,  10:33 Найти цитируемый пост)
А С++ есть обмен сообщениями? Прям из коробки?

Да, пожалуйста, реализовывай в своих классах только метод void dispatch(Message *m); и будет тебе обмен сообщениями.

Цитата(ksnk @  11.12.2013,  10:33 Найти цитируемый пост)
Без всяких осовских API.

При чем тут API ОС?

Автор: ksnk 11.12.2013, 11:44
А Message это что (в каком файле инклюдится?) А dispatch это откуда? Просто моя коробка немного другая, наверное smile

Цитата(k0rvin @  11.12.2013,  10:45 Найти цитируемый пост)
При чем тут API ОС? 

Мне всегда казалось, что без транспортного уровня смысла в сообщениях немного. А транспорт (средство доставки сообщений) и идентификацию адресатов-отправителей определяет нам ос.

Автор: k0rvin 11.12.2013, 12:14
Цитата(ksnk @  11.12.2013,  11:44 Найти цитируемый пост)
А Message это что

Тип "Сообщение". Например в самом простом виде это *void.

Цитата(ksnk @  11.12.2013,  11:44 Найти цитируемый пост)
(в каком файле инклюдится?)

В любом.

Цитата(ksnk @  11.12.2013,  11:44 Найти цитируемый пост)
А dispatch это откуда?

В каком смысле откуда? Откуда методы у классов берутся?

Цитата(ksnk @  11.12.2013,  11:44 Найти цитируемый пост)
Мне всегда казалось, что без транспортного уровня смысла в сообщениях немного. А транспорт (средство доставки сообщений) и идентификацию адресатов-отправителей определяет нам ос. 

При чем тут это все, если мы говорим о языке.

Грубо:
Код

typedef int Message;
const Message Print = 0;
const Message Println = 1;

struct Object
{
    virtual void dispatch(Message) = 0;
};

struct HelloPrinter1 : Object
{
    virtual void dispatch(Message m)
    {
        switch (m) {
        case Print:
            std::cout << "Hello";
            break;
        default:
            throw UnsupportedMessage;
        }
    }
};

struct HelloPrinter2 : Object
{
    virtual void dispatch(Message m)
    {
        switch (m) {
        case Print:
            std::cout << "Hello";
            break;
        case Println:
            std::cout << "Hello" << std::endl;
            break;
        default:
            throw UnsupportedMessage;
        }
    }
};

int main()
{
    Object *helloPrinter1 = new HelloPrinter1();
    Object *helloPrinter2 = new HelloPrinter2();
    helloPrinter1->dispatch(Print);
    helloPrinter1->dispatch(Println);
    helloPrinter2->dispatch(Print);
    helloPrinter2->dispatch(Println);
}

Автор: ksnk 11.12.2013, 14:30
"Из коробки" и "Давайте я тут прямо вот все напишу" - разные вещи. Не?

Автор: k0rvin 11.12.2013, 14:34
Цитата(ksnk @  11.12.2013,  14:30 Найти цитируемый пост)
"Из коробки" и "Давайте я тут прямо вот все напишу" - разные вещи. Не?

А что в таком случае должно значить "из коробки"? Специальные ключевые слова? Но зачем? Их и так довольно много.

Автор: ksnk 11.12.2013, 15:01
Это я про то, что 
Цитата

Поскольку обмен сообщениями считается ключевым в ООП по Кею
, а вот у С++, формально, нет обмена сообщениями.

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

Это я про то, что определения - они такие определения.

Автор: k0rvin 11.12.2013, 15:14
Цитата(ksnk @  11.12.2013,  15:01 Найти цитируемый пост)
, а вот у С++, формально, нет обмена сообщениями.

Потому что ООП не имеет единственно верного или хотя бы четкого определения и кроме SmallTalk есть еще Simula, от которой C++-ное ООП и идет.

Спорить, какое ООП самое правильное, нет никакого желания, так что да,
Цитата(ksnk @  11.12.2013,  15:01 Найти цитируемый пост)
определения - они такие определения


Автор: Bulat 11.12.2013, 15:16
Цитата(ksnk @  11.12.2013,  15:01 Найти цитируемый пост)
то можно вспомнить про язык Форт. Его никто даже и не подозревает в ООП'ности с инкапсуляцией и наследованием, однако на самом форте можно написать вполне себе ООП, со всеми необходимыми половыми признаками.

 smile половая дискриминация!!!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)