Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Базарная площадь
  
О разделе

Основная страница

Группы обсуждений


Тематический каталог обсуждений

Архив

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  10:29[Войти] | [Зарегистрироваться]
Обсуждение темы:
Оберон-технология: особенности и перспективы


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

Количество сообщений на странице

Порядок сортировки сообщений
Новое сообщение вверху списка (сетевая хронология)
Первое сообщение вверху списка (обычная хронология)

Перейти на конкретную страницу по номеру


Всего в теме 6256 сообщений

Добавить свое сообщение

Отслеживать это обсуждение

Обсуждение из раздела
Школа ОБЕРОНА

<<<... | 2776—2767 | 2766—2757 | 2756—2747 | ...>>>
Всего сообщений в теме: 6256; страниц: 626; текущая страница: 350


№ 2766   16-02-2007 06:07 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 2763« (Сергей Перовский)
___________________________

А для РАЗРАБОТКИ объектов невозможность использовать прототипы - большой минус.

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

Для чего задумывался класс? Для инкапсуляции (данные + поведение) -- что по Хоару (record class), что по Далу-Нигаарду. Инкапсуляции прозрачной, не предусматривающей information hiding. Потом начался центростремительный процесс создания однополярного мира под названием ООП. Есть класс, все остальное -- ерунда. В него запихнем все что можно, потом будем разгребать эту кучу...

Класс вроде бы исходил из классификации иерархической, которой дали название наследование (inheritance). Ну наследование, так наследование. Но потом так завязли в ООП, что стали думать как справиться при этом однополярном мире со все новыми и новыми проблемами, которые сам мир и создал: множественное наследование, композиция, агрегация, делегирование...

Это и есть, с моей точки зрения, чисто операционный подход (не важно зачем, важно как; khow how), в противовес концептуальному (know why). Вы не обратили внимание, что сейчас программирование как деятельность сводится преимущественно к программированию на конкретном языке? Оно к нему прилипло намертво. Мы обсуждаем все больше технические проблемы того или иного языка или (как в случае данной дискуссии), как средства одного языка воплотить в другом. Может, не от того танцуeм? Может, прежде чем строить, думать надо?

У меня в кармане гвоздь, а у вас?  А у нас сегодня кошка родила троих котят. Котята выросли немножко, а пить из блюдца не хотят.


№ 2765   16-02-2007 06:02 Ответить на это сообщение Ответить на это сообщение с цитированием
Можно тонны литературы по проектированию написать (правильному!)... Но пока средства языка позволяют делать вот так:
...

#define private public
#define protected public

#include "need_class_file.hpp"

#undef private
#undef protected
...
юзаем "кишки" предков по полной программе (а коллеги удивляются разным "эхвектам". ... ну, или их отсутствию :) )...

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

ЗЫ Между прочим, у человека, что это написал, крепкий здоровый сон...
Сообщение не подписано


№ 2764   16-02-2007 05:55 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 2763« (Сергей Перовский)
___________________________
для РАЗРАБОТКИ объектов невозможность использовать прототипы - большой минус.
А что вы понимаете под прототипами? Реализацию заявленной функциональности интерфейса? Но при сегодняшнем понимании объектов, вы вынуждены будете открывать класс. Потому, что у вас не описывается формализованным образом семантика обмена по вызовам.
Сообщение не подписано


№ 2763   16-02-2007 05:42 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 2761« (Руслан Богатырев)
___________________________
>>>По мысли Алана Кея, каждый объект должен быть подобен маленькому компьютеру, который совмещает в себя данные и "программы" (методы). При такой модели для взаимодействия объектов между собой нет надобности открывать реализацию.
С точки зрения специалиста по сетям, компьютер может быть опломбирован :)
А с точки зрения производства компьютеров, начинать каждый компьютер проектировать начиная со спецификаций - абсурд.
Для ВЗАИМОДЕЙСТВИЯ объектов между собой нет надобности открывать реализацию в любом варианте.
А для РАЗРАБОТКИ объектов невозможность использовать прототипы - большой минус.


№ 2762   16-02-2007 05:33 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 2760« (Антон Григорьев)
___________________________

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

А что Вы понимаете под надежностью? И что -- под надежным языком? Вопрос не праздный.


№ 2761   16-02-2007 05:30 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 2759« (Сергей Перовский)
___________________________

А при неграмотном и в Обероне можно такого наворотить :)

Верно. Наворотить можно в любом языке. Только наворот навороту рознь.


Насчет единицы инкапсуляции боюсь опять увязнем в терминологии.
Точное определение инкапсуляции приведете?
Record под него не попадет?


Вообще-то лучше следовать классике. Дэвид Парнас в работе "On the Criteria To Be Used in Decomposing Systems into Modules" ввел понятие information hiding (информационное сокрытие). Термин "инкапсуляция" он не использовал.

А вот инкапсуляция (encapsulation) -- это связывание данных с операциями по их обработке (с методами в ООП). Связанные процедуры Oberon-2 и КП -- это инкапсуляция, а управление информационным сокрытием передано модулю. При этом модуль можно рассматривать и как средство "слабой инкапсуляции", например, при реализации абстрактных типов данных (без ООП), когда тип (абстрактный) и операции по работе с ним вложены в "коробочку" под именем "модуль". Набор методов (поведение) должно быть неотъемлемо от объекта, это азбука ООП в истоках Симулы (Дала и Нигаарда).

По мысли Алана Кея, каждый объект должен быть подобен маленькому компьютеру, который совмещает в себя данные и "программы" (методы). При такой модели для взаимодействия объектов между собой нет надобности открывать реализацию.

С ООП ситуация вообще интересна: идеи заложил один (Тони Хоар), первую модель воплотили другие (Дал и Нигаард), "эталонную" модель и термин "object-oriented" -- следующий (Алан Кей), а богатую почву для последующих "лесов" интерпретации еще один (Бьерн Страуструп). В результате никто сейчас не может дать дать спецификацию ООП, которая была признана эталоном. На это даже замахнулся Бертран Мейер, получивший за свой труд "Object-Oriented Software Construction" в 2005 г. премию Дала-Нигаарда. Но его книгу просто приняли к сведению... Да и на эталон по ООП она как-то не тянет...



№ 2760   16-02-2007 04:56 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 2755« (Илья Ермаков)
___________________________

Нет конструкторов - программист просто ОБЯЗАН, обязан всей идеологией, всеми нормами, всеми примерами, которые видит, использовать гомогенные иерархии с четким выделением абстрактных интерфейсов и объектами-фабриками (в ББ называемыми "каталогами").

Чем ваша фраза отличается от такой?

Нет проверки границ массива - программист просто ОБЯЗАН, обязан всей идеологией, всеми нормами, всеми примерами, которые видит, проверять их самомстоятельно.

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


№ 2759   16-02-2007 04:44 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 2751« (AVC)
___________________________
>>>Ведь Оберон создавался с прицелом на расширяющее и компонентное программирование, а наследование реализации не слишком с этим сочетается (проблема хрупких классов и т.п.).
Не могу удержаться, чтобы не ответить любимой на этом форуме фразой:
ПРИ ГРАМОТНОМ ПРОЕКТИРОВАНИИ проблема хрупких классов не возникает.
А при неграмотном и в Обероне можно такого наворотить :)



№ 2758   16-02-2007 04:43 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 2754« (Сергей Перовский)
___________________________

Ответ на »сообщение 2737« (AVC)
___________________________
>>>Как насчет единицы инкапсуляции (разделение интерфейса и реализации)?
>>>Вообще, формулу класс = тип + модуль не я придумал (а Б.Мейер).
Не важно, кто придумал, цитируете - отвечайте :)
Насчет единицы инкапсуляции боюсь опять увязнем в терминологии.
Точное определение инкапсуляции приведете?
Record под него не попадет?

Сергей, Вы не понимаете формулы "класс = тип + модуль", потому что тоже работаете в Паскале (Объектном), где модули есть, а инкапсуляция работает между модулями, а не для каждого отдельно взятого класса (вель внутри модуля все классы видят скрытую реализацию друг друга).

Формула "класс = тип + модуль", в частности, воплощена в С++, где инкапсулирующей единицей является класс, где класс может содержать внутри себя любую иерархию объявлений вложенных подклассов и т.п. Мейер в Ейфеле пошел тем же путем. "Смешались в кучу кони, люди...", в общем.
Класс одновременно и тип данных, и модуль - чтобы принять такое определение, да еще правильно использовать классы в двух ипостасях, нужно порядком вывихнуть мозговые извилины :-)


№ 2757   16-02-2007 04:41 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 2749« (AVC)
___________________________

Антон, не могли бы Вы сказать пару слов о реализации виртуальных конструкторов в Дельфи?

С точки зрения исходного кода виртуальный конструктор выглядит так же, как и любой другой виртуальный метод. Чтобы конструктор стал виртуальным, его надо объявить со словом virtual, в потомках перекрывать со словом override. С виртуальными конструкторами тесно связаны указатели на классы (в других языках аналогичные типы называют метаклассами). Если тип TSample является классом, то можно объявить такой тип:

TSampleClass = class of TSample;



Пусть TSample1 и TSample2 - наследники TSample (может быть, не непосредственные), а SampleClass - переменная типа TSampleClass. Тогда допустимы следующие присваивания:

SampleClass:=TSample;
SampleClass:=TSample1;
SampleClass:=TSample2;



Если Sample имеет тип TSample, допустимо такое создание нового объекта:

Sample:=SampleClass.Create;



Если конструктор Create в TSample и его наследниках виртуальный, будет создан экземпляр того класса, которому соответствует значение SampleClass. Естественно, SampleClass может указывать на класс, неизвестный на момент компиляции этой строки - главное, чтобы он был наследником TSample.


<<<... | 2776—2767 | 2766—2757 | 2756—2747 | ...>>>
Всего сообщений в теме: 6256; страниц: 626; текущая страница: 350


Добавить свое сообщение

Отслеживать это обсуждение

Дополнительная навигация:
Количество сообщений на странице

Порядок сортировки сообщений
Новое сообщение вверху списка (сетевая хронология)
Первое сообщение вверху списка (обычная хронология)

Перейти на конкретную страницу по номеру
  
Время на сайте: GMT минус 5 часов

Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
Функция может не работать в некоторых версиях броузеров.

Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

 
© При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
Все используемые на сайте торговые марки являются собственностью их производителей.

Яндекс цитирования