LINUX.ORG.RU

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

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

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

Скорее любой язык с готовой реализацией message passing.

anonymous
()

Метод есть функция, которой в качестве первого параметра передана структура. Что там реализовывать?

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

>Метод есть функция, которой в качестве первого параметра передана структура. Что там реализовывать?

ООП - это инкапсуляция, наследование и полиморфизм.

То что ты описал это реализация только первого слова ;)

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

>Классное представление об ООП

человек просто не в теме. =)

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

> ООП - это инкапсуляция, наследование и полиморфизм.

Гыгы три раза.

OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things. It can be done in Smalltalk and in LISP. There are possibly other systems in which this is possible, but I’m not aware of them.

Отцу виднее.

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

>ООП - это инкапсуляция, наследование и полиморфизм.

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

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

Из прочитанного выше естественно.

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

> Из прочитанного могу сказать, что очень сомнительно что реализация последних двух возможна в таких языках как Си без дополнительных библиотек.

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

anonymous
()

абстрактные типы данных, не?

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

>Из прочитанного могу сказать, что очень сомнительно что реализация последних двух возможна в таких языках как Си без дополнительных библиотек.

Посмотри все-таки на GLib.. Ее же как-то на Си написали. Там даже виртуальные функции как-то сделаны... правда я нифейоха не понял как их юзать(

Вот тут почитай:

http://linfoline.homedns.org/API/glib/index.html - GLib

http://linfoline.homedns.org/API/gobject/index.html - GObject

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

В GLib наследование есть. Я свой виджет делал на основе GtkDrawingArea.

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

>OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things. It can be done in Smalltalk and in LISP. There are possibly other systems in which this is possible, but I’m not aware of them.

>Отцу виднее.


я придумал термин "объектно-ориентированный" и я не имел в виду си плюс плюс(с) ?

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

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

Ну про что я собственно и говорил - неродные средства языка. А я так понял препод хочет именно средствами языка. Там скорее не Объектно-ориентированный подход, а просто объектный в некотрой литературе я встречал такое понятие, про объектные модели которые не реализуют все три принципа ООП.

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

>Полиморфизм - элементарно.

Ну да, соглашусь.

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

> и зачастую преподаватели в вузах с ним не согласны)

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

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

>Ну про что я собственно и говорил - неродные средства языка. А я так понял препод хочет именно средствами языка.

Ты так говоришь, как буд-то glib совсем сторонная либа, которая из си делает что-то ужасное (гм.. по описанию получился с++). Она же на Си написана. Если нельзя использовать сторонние библиотеки, то просто возьми исходники и разберись как все устроено в glib.. и по аналогии сделай то что нужно.

mono ★★★★★
()

А если брать Smalltalk за эталон реализации ООП, то тогда ObjC необычайно заруливает все подряд. Но почему тогда так популярны плюсы?

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

>очень сомнительно что реализация последних двух возможна в таких языках как Си без дополнительных библиотек

Сходи по ссылке на ooc.pdf, которую тебе уже кинули. Это не страшно.

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

>А если брать Smalltalk за эталон реализации ООП, то тогда ObjC необычайно заруливает все подряд. Но почему тогда так популярны плюсы?

как будто макофилия стыдной вещью является только на лоре) а вообще почему windows популярный? вот тебе и ответ..

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

>Неужели в майкрософт одни дебилы сидят? почему вот взяли C++, а не ObjC?

видимо хотели think different, чтобы было не как в nextstep

st0ke
()

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

Например typedef struct { int a; } A;

typedef struct { A a; int b; } B; ....

B* b = (B*)malloc(sizeof(B)); A* a = (A*) b; a.a = 10; printf("%d", b.a.a);

Конечно, не поддерживается множественное наследование, но оно вообще мало где поддерживается.

Теперь полиморфизм. Реализуется через VTBL, точно так же, как сделано в большинстве компиляторов С++. Кстати, ВСЕ фичи С++ можно реализовать на С.

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

>>А если брать Smalltalk за эталон реализации ООП, то тогда ObjC необычайно заруливает все подряд. Но почему тогда так популярны плюсы?

ObjC даже уродливее, чем C++. У него кошмарный синтаксис.

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

> Конечно, не поддерживается множественное наследование

> Кстати, ВСЕ фичи С++ можно реализовать на С.

Нет ли здесь противоречия? %)

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

>ВО-первых, ООП - это инкапсуляция, полиморфизм и наследование, чтобы там не говорили "Отцы".

Ха-ха-ха-ха-ха. ООП - это привязка определенных ДЕЙСТВИЙ к определенному ТИПУ.

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

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

>>Кстати, ВСЕ фичи С++ можно реализовать на С.

>>Здесь обсуждается ООП а не шаблоны.

Противоречим самому себе? Или это уже другой анонимус?

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

>Противоречим самому себе? Или это уже другой анонимус?

Шаблоны не всегда были в C++, детка.

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

>Шаблоны не всегда были в C++, детка.

А когда-то и C++ не было, детка. И чо? Сказать по существу нечего?

Sectoid ★★★★★
()

Экзамен сдал на "отл", но книжечку выше почитаю. Тема меня заинтересовала.

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

Шаблоны на С делаются очевидным образом - размножением соответствующих типов. В случае шаблонов компилятор приходит тебе на помощь, делая это за тебя. Множественное наследование реализовать на С можно. Просто это будет существенно более трудоемкая задача.

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