Консультация № 176519
05.02.2010, 23:01
0.00 руб.
0 20 1
Добрый вечер, уважаемые эксперты! Требуется подготовить занятие на тему "Объектные модели языков программирования".
1. Должно быть дано определение понятия объектной модели и классификация (если таковая имеется)
2. Принципы сравнения моделей языков программирования
3. Конкретный разбор.

У Гради Буча я прочитал
объектная модель, object model. Совокупность основополагающих принципов, лежащих в основе объектно-ориентированного проектирования; парадигма программирования, основанная на принципах абстрагирования, инкапсуляции, модульности, иерархичности, типизации, параллелизма и устойчивости.
К сожалению, я не понял, как на основании этого определения сравнить объектную модель, например, VC++ и Delphi.
Подскажите, пожалуйста, где можно найти в стандартах, литературе (русской, английской) другое определение, толкование. Где можно найти описание объектных моделей конкретных языков?
Заранее признателен.

Обсуждение

давно
Профессор
230118
3054
05.02.2010, 23:19
общий
lamed:
http://www.intuit.ru/department/se/oopbases/
Модель ООП в Java - http://www.intuit.ru/department/pl/javanetbeans/2/
давно
Профессор
230118
3054
05.02.2010, 23:26
общий
lamed:
С этой точки зрения нельзя рассматривать VC++ и Delphi, а C++ и Object Pascal. С точки зрения объектной модели они различаются незначительно, потому что оба - процедурные языки, к которым добавились классы. В Отличие от них, Java и С# изначально проектировались как объектно-ориентированные, и в них даже для main нужно создавать класс.
Неизвестный
05.02.2010, 23:38
общий
это ответ
Здравствуйте, lamed.
Вот только что, как по заказу скачал зачем-то Объектно-ориентированное программирование: Иванова Г.С, Ничушкина Т.Н., Пугачев Е.К.
Объектно-ориентированное программирование: Учеб. для вузов/
Под ред. Г.С. Ивановой. - М.: Изд-во МГТУ им. Н.Э. Баумана,
2001. - 320 с , ил. (Сер. Информатика в техническом университете).
5
Спасибо за оперативную помощь!
Неизвестный
06.02.2010, 00:11
общий
lamed:
Я вижу что уже не первый. Но всё равно...
Первое что пришло в голову:
объектноориентированное программирование на википедии.

Об объектной модели можно говорить долго. Но тут ведь даже и не совсем строение языка имееться в виду! Этот термин используеться и чуток в другом:
dom - document object model
com - component object model

Говоря по простому, объектная модель заключаеться в том, чтобы представить в виде объекта некие сущности.
Не важно что это, экземпляр типа данных (type, structure, class) - как в языке C++.
Или же вообще любая языковая конструкция, например функция или сам класс, как в языке rubi.
А может быть элемент xml-документа или html-документа, как в dom.

Сравнивать... О! Тут можно докатиться до жуткого.
сравнение языков программирования опять же на википедии.

Все языки, в той или иной мере долеки от объектной модели. Ведь опять же C++, ну что поделать если куча заморочек при метоморфизме или например с делигатами (указателями на методы). C++ вообще статический язык и это его особенность не очень-то совместима с объектной моделью.
В поисках языка, который бы отвечал
Из ныне существующих языков, наверное только rubi реально отвечает объектной модели.
давно
Академик
320937
2216
06.02.2010, 09:37
общий
Доброе утро, уважаемые коллеги! То, что я на сегодня нашел на буржуйских (и немного на наших сайтах) -
Details of the Object Model
Class-Based vs. Prototype-Based Languages
Class-based object-oriented languages, such as Java and C++, are founded on the concept of two distinct entities: classes and instances.
A prototype-based language, such as JavaScript, does not make this distinction: it simply has objects...


Элемент, по которому различаются языки ООП - их объектная модель. Некоторые традиционные языки ООП позволяют программистам создавать объекты в стеке, в куче (в хипе - heap) или в статической памяти. В этих языках переменная типа класс соответствует объекту в памяти. Так работает C++.
В последнее время появилась тенденция использовать другую модель, часто называемую ссылочно - объектной моделью. В этой модели каждый объект динамически размещается в куче, а переменная типа класс фактически является ссылкой или хэндлом объекта в памяти (технически это нечто вроде указателя). Java и Object Pascal оба используют эту ссылочную модель. Как мы увидим, вкратце это значит, что вам необходимо не забыть выделить память для объекта.
Концепция объектной модели породило понятие – объектно-ориентированное программирование (ООП). Когда ключом модели становится объект и его свойства.
В ООП основными концепциями являются понятия объектов и классов (либо, в менее известном варианте языков с прототипированием — прототипов). Класс — это тип, описывающий устройство объектов...Прототип — это образцовый объект, по образу и подобию которого создаются другие объекты


Таким образом, как я понимаю, получаются разделения по моделям:
1. на концепции классов либо прототипов
2. на использовании памяти для размещения объектов (C++ vs. Java)
Так ли это?
Сформулирую вопрос несколько иначе. Какие (и по каким критериям) существуют классификации объектных моделей языков программирования?
С уважением.
давно
Академик
320937
2216
06.02.2010, 09:40
общий
Boriss:
Доброе утро! Спасибо за ссылку. Книжка эта естьК сожалению, там не нашел определения понятия и классификации объектных моделей, иначе сравнение "повисает" в воздухе.
давно
Профессор
230118
3054
06.02.2010, 11:39
общий
lamed:
Что значит "не забыть выделить память?". В Java память выделяется автоматически, и возвращается тоже. А в С++ нужно не забыть вызвать деструктор. Неплохо бы рассмотреть Симулу, как первый чисто ооп-язык.
давно
Профессор
230118
3054
06.02.2010, 11:45
общий
lamed:
Существует 3 класса языков, так или иначе связанных с объектами:

1. Объектно-ориентированные
2. Объектные
3. Объектно-базированные

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

К объектным языкам относят языки как минимум поддерживающие инкапсуляцию. Они позволяют создавать пользовательские объекты, но, обычно не поддерживают наследование или полиморфизм, или же поддерживают, но не в полной мере. Типичными представителем объектных языков являются Visual Basic до шестой версии включительно и Ada.

К объектно-базированным языкам программирования относятся языки, которые могут использовать имеющиеся объекты, но не имеющие механизма создания полноценных пользовательских объектов. JavaScript относится именно к объектно-базированным языкам программирования. Так, с помощью этого языка можно использовать многочисленные объекты объектной модели документа (DOM), с помощью которых, согласно последним стандартам, предписывается представлять содержимое веб-страницы.
давно
Академик
320937
2216
06.02.2010, 14:00
общий
Гаряка Асмик:
Добрый день! Таким образом, получаем:
1. Определение Гради Буча
2. Существует только одна классификация?
1. Объектно-ориентированные
2. Объектные
3. Объектно-базированные
На эту классификацию нужна ссылка на официальный источник, тот, кто имеет право классифицировать (не Википедия и не Интуит)
3. Дальше просто смотрим, что реализовано из наследования, инкапсуляции и полиморфизма.
Куда включить, COM, DCOM, dot.Net в этой классификации непонятно.
В Java память выделяется не автоматически, а операцией new. Table t = new Table();
давно
Профессор
230118
3054
06.02.2010, 14:06
общий
lamed:
а Линней у кого-то спрашивал права? Он просто взял и классифицировал. Будьте компьютерным Линнеем.
давно
Профессор
230118
3054
06.02.2010, 14:07
общий
lamed:
Операцией new создается объект. А память выделяет java-машина попутно.
давно
Академик
320937
2216
06.02.2010, 17:51
общий
Гаряка Асмик:
Это кусочек статьи в оригинале, я привел перевод .
Java and Object Pascal both adopt this reference model. As we'll see in a while this means that you should remember to allocate memory for the object.
Полагаю, Марко Кэнту знает, о чем пишет.
давно
Профессор
230118
3054
06.02.2010, 17:53
общий
lamed:
Ссылка на авторитеты?
давно
Академик
320937
2216
06.02.2010, 17:57
общий
Гаряка Асмик:
C++ Table t; // память для объекта типа Table;
Java Table t; // память для ссылки на объект типа Table.
давно
Академик
320937
2216
06.02.2010, 17:59
общий
Гаряка Асмик:
Мне требуется именно сослаться на авторитеты, а еще лучше на комитеты по стандартизации или что-то подобное
давно
Профессор
230118
3054
06.02.2010, 18:10
общий
Есть комитеты по стандартизации отдельных языков, но не всех языков сразу.
Неизвестный
07.02.2010, 03:14
общий
Цитата: Асмик Гаряка
Существует 3 класса языков, так или иначе связанных с объектами


Ха-эм. А я вот знаю ещё один тип:
4. основанный на классах

Это процедурный язык, типы которого являються классами. Такие классы могут иметь методы и поля. Можно создавать объекты, можно их разрушать, копировать. Но вот наследование, полиморфизм и прочие радости остаються за бортом.
например таким языком являеться freebasic.
Возможно даже C ( плохо его знаю, чтобы уверенно говорить. )

А вот классификации. Официальной, а не самопальной не встречал. Тут надо рыться уже не в спецификациях. А в каких-нибудь университетских работах.
Не знаю, может быть их архивы открыты? Должны поидеи быть доступны. Дипломные работы, диссертации, статьи и всё такое.
давно
Академик
320937
2216
09.02.2010, 20:51
общий
Гаряка Асмик:
Добрый вечер! Спасибо за помощь и обсуждение. Как я выяснил за эти несколько дней, была попытка в 1996-1997 году работы над проектом Technical Committee H7 Object Model Features Matrix, однако дальнейшего развития этот проект не получил. Поэтому согласен с Вами, что "ниша" есть.
давно
Академик
320937
2216
09.02.2010, 20:54
общий
Артём Талипов:
Добрый вечер! Спасибо за участие в заданном вопросе. Тема, мне кажется, полезная.
Неизвестный
10.02.2010, 01:46
общий
lamed:
Ещё какая интересная.
Но тут я больше подхожу с практической стороны.
А с некоторыми языками пообщался.
О теории, как-то и не задумывался.
Форма ответа