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

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

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


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

Архив

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


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

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

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

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

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

 
   
С Л С

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

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

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

Квинтана

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

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

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

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

 
  
АРХИВЫ

 
 

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


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

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

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

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


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

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

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

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

<<<... | 2756—2747 | 2746—2737 | 2736—2727 | ...>>>
Всего сообщений в теме: 6256; страниц: 626; текущая страница: 352


№ 2746   Удалено модератором


№ 2745   16-02-2007 03:25 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 2720« (Антон Григорьев)
___________________________

Обязательная проверка границ массива снижает быстродействие программы в среднем на 5%.

Неправда. В мало-мальски реалистичных случаях это скорее 1-2%, когда вообще удается измерить.


№ 2744   16-02-2007 03:14 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 2742« (Антон Григорьев)
___________________________

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

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


№ 2743   16-02-2007 02:08 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 2742« (Антон Григорьев)
___________________________
можно ли в Обероне создать такой тип, что его экземпляры можно будет создавать только через фабрику, но при этом другие модули не потеряют возможности создавать расширения этого типа?

Это невозможно по определению. Ведь единственный способ запретить создавать обьект в обход функции-фабрики - это сделать его private, то есть спрятать от других модулей. А это значит что снаружи вы его не увидите, и как следствие никаких классов от него наследовать не сможете.
Приходится выбирать - либо конструктор, либо наследование :))



№ 2742   16-02-2007 01:13 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 2734« (AVC)
___________________________

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


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

Кстати, хотелось бы увидеть пример, как фабрика может заменить виртуальный конструктор вот в таком случае:

Есть модуль A. В нём объявлен тип A.B. И в этом же модуле есть некоторая процедура A.X, которая для своих внутренних нужд может создать экземпляр любого типа, являющегося расширением A.B. Какого именно типа - это передаётся процедуре A.X извне через её параметры. Модули, в которых определяются расширения типа A.B, а также осуществляются вызовы A.X, на момент компиляции модуля A ещё не существуют. В Delphi через виртуальные конструкторы и указатели на классы это делается элементарно. А в Обероне?

И прошу не оставлять без внимания такой вопрос (его уже озвучил Jack of Shadows): можно ли в Обероне создать такой тип, что его экземпляры можно будет создавать только через фабрику, но при этом другие модули не потеряют возможности создавать расширения этого типа?


№ 2741   16-02-2007 00:54 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 2736« (Jack Of Shadows)
___________________________
О том что такое такой вот набор design patterns "грамотного проектирования" в ОО языках, разговор на ветке ФП уже был.
Джек, если не притомит - бросьте конкретный адресок этого эпизода на эту тему...
Programming in Lisp is like bike riding! Having results just after thoughts! :)
Сообщение не подписано


№ 2740   16-02-2007 00:37 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 2732« (Сергей Перовский)
___________________________
>>> в Дельфи другого пути просто нет.


type PR= ^record ...


Записи Оберона соответстсвуют скорее записям, а не объектам Дельфи.



№ 2739   15-02-2007 20:02 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 2738« (AVC)
___________________________
Хм... а как пишется конструктор?
Если в вашем распоряжении имеется конструктор. то вам не надо:
1. Прятать обьект, закрывая его интерфейсом.
2. Спрятав обьект терять возможность его наследования. С конструктором вы можете иметь и то и другое - и наследование и интерфейсы.
3. Напоминать себе писать функции фабрики, потому что в большинстве случаев они не нужны.

Если это "тот самый" механизм, почему для него в языках с конструкторами существует целый ряд паттернов проектирования?
Если вы о фабриках то они не для конструирования обьектов. Они для параметризации, то есть унифицированного механизма создания РАЗНЫХ обьектов.
Для создания одного и того же обькта (а это в подавляющем большинстве случаев) фабрика не нужна, конструктора вполне достаточно.

И кстати это тоже показывает ограниченность ОО как инструмента.

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


Да, но задача сохранения целостности данных одна на всех и не зависит от набора полей и их типов :))
Следуя вашему аргументу можно заявить что раз в таблицах базы данных разное количество и тип полей то и транзакционность мол в каждом случае должна обеспечиваться силами самой таблицы :))


№ 2738   15-02-2007 19:27 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 2736« (Jack Of Shadows)
___________________________

Но все это надо делать ручками.

Хм... а как пишется конструктор?

ТО есть каждый раз создавать тот самый механизм от которого отказались :))

Если это "тот самый" механизм, почему для него в языках с конструкторами существует целый ряд паттернов проектирования?


AVC: Т.е. она одновременно проще и гибче конструктора.
Ошибаетесь. Если бы это было так то эту вот общую задачу корректной инициализации обьектов можно было бы как нибудь выделить в виде библиотечной функции.


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


№ 2737   15-02-2007 19:11 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 2735« (Сергей Перовский)
___________________________

Ответ на »сообщение 2734« (AVC)
___________________________
>>>Фабричная процедура позволяет делать ровно то же самое, что и конструктор
Мы не про то. Конечно позволяет.
Но она позволяет НЕ делать.


Илья Ермаков привел схематичный пример (»сообщение 2729«) с поправкой: (»сообщение 2730«), опровергающий это Ваше утверждение.


>>>класс = тип + модуль
Это я не понимаю. Термин модуль используется в значениях единицы текста, единицы трансляции, единицы загрузки. Ни под один из этих смыслов класс не попадает. Специальный тип данных, не более.


Как насчет единицы инкапсуляции (разделение интерфейса и реализации)?
Вообще, формулу класс = тип + модуль не я придумал (а Б.Мейер).
 AVC


<<<... | 2756—2747 | 2746—2737 | 2736—2727 | ...>>>
Всего сообщений в теме: 6256; страниц: 626; текущая страница: 352


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

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

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

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

Перейти на конкретную страницу по номеру
  
Время на сайте: 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» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
Все используемые на сайте торговые марки являются собственностью их производителей.

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