Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.12.30;
Скачать: [xml.tar.bz2];

Вниз

Структурный вопрос - функции VS методы   Найти похожие ветки 

 
Черный Шаман   (2007-11-29 17:38) [0]

Есть некоторые функции для работы с классическим Canvas, по типу хитрого рястягивания картинки с отступами масштабирования, отражением картинки, альфауровнем картинки...

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

Как правильнее организовать.

1. Сделать классические функции в стиле процедурного программирования.
2. Откопировать их в 3 предка в качестве методов.
3. Стиль Java - создать класс и оформить их в классическом стиле классовых функций.

Вот, страдаю. Не знаю как красивее и правильнее.


 
clickmaker ©   (2007-11-29 17:41) [1]

1 - в отдельном юните


 
wicked ©   (2007-11-29 17:44) [2]

задача звучит примерно так

> есть унитаз и ершик
> какую бумагу подобрать - наждачную, газетную или обычную?
> как правильнее?


 
Черный Шаман   (2007-11-29 17:46) [3]


> clickmaker ©   (29.11.07 17:41) [1]
>
> 1 - в отдельном юните


Оно понятно что в отдельном юните, но посмотрев на Java, процедурное программирование мне кажется варварством.


 
Черный Шаман   (2007-11-29 17:47) [4]


> wicked ©   (29.11.07 17:44) [2]
>
> задача звучит примерно так
>
> > есть унитаз и ершик
> > какую бумагу подобрать - наждачную, газетную или обычную?


Тоесть 3?


 
wicked ©   (2007-11-29 17:48) [5]

> Черный Шаман   (29.11.07 17:47) [4]

>
> Тоесть 3?

то есть, ты мало рассказал в первом постинге
иногда - 1
а иногда - навалять кучку интерфейсов и общаться через них


 
clickmaker ©   (2007-11-29 17:48) [6]


> процедурное программирование мне кажется варварством

почему? Ты же WinAPI юзаешь. Вот твои функции - тоже некое апи


 
Черный Шаман   (2007-11-29 17:59) [7]


> wicked ©   (29.11.07 17:48) [5]
>
> > Черный Шаман   (29.11.07 17:47) [4]
>
> >
> > Тоесть 3?
>
> то есть, ты мало рассказал в первом постинге
> иногда - 1
> а иногда - навалять кучку интерфейсов и общаться через них


Например такие функции
procedure DrawMarginsTransparent(MCanvas: TCanvas; const Dest, Margins: TRect; Bitmap: TBitmap);
procedure MirrorImage(Bitmap: TBitmap; Horizontal, Vertical: Boolean);

Отлично подходит под 1, но не люблю я процедурное. В классовых функциях есть еще удобное различие по namespace.


 
iZEN ©   (2007-11-29 18:17) [8]

Создать утилитарный класс Transform по образцу java.lang.Math.

(Класс в Java считается модулем)


 
Alkid ©   (2007-11-29 18:44) [9]

Создай отдельный визитор, который бы умел обрабатывать все эти классы.

P.S. А процедурное программирование не замай :) Вообще не люблю, когда берут одну парадигму (щас модно ООП и ФП) и превозносят, отвергая остальное.


 
Черный Шаман   (2007-11-29 18:56) [10]


> iZEN ©   (29.11.07 18:17) [8]
>
> Создать утилитарный класс Transform по образцу java.lang.
> Math.
>
> (Класс в Java считается модулем)
>


Тоесть 3?


 
Gadenysh   (2007-11-29 19:18) [11]

имхо, класс(какой-нить TImageOperator) и методы. преимущество перед процедурами - их можно сделать виртуальными


 
@!!ex ©   (2007-11-29 19:21) [12]

> имеется три ветви наследования, общего предка создать невозможно

Множественное наследование?


 
Черный Шаман   (2007-11-29 19:42) [13]


> @!!ex ©   (29.11.07 19:21) [12]
>
> > имеется три ветви наследования, общего предка создать
> невозможно
>
> Множественное наследование?


В Delphi?

Наследники от TСontrol, TWinControl, Tform.


 
@!!ex ©   (2007-11-29 19:47) [14]

> В Delphi?

Интерфейсы.

> Наследники от TСontrol, TWinControl, Tform.

Это одна ветка, кстати.
TForm наследние TWinControl наследник TControl


 
Черный Шаман   (2007-11-29 19:59) [15]


> @!!ex ©   (29.11.07 19:47) [14]
>
> > В Delphi?
>
> Интерфейсы.
>
> > Наследники от TСontrol, TWinControl, Tform.
>
> Это одна ветка, кстати.
> TForm наследние TWinControl наследник TControl


Угу и мне тупо копировать все процедуры с WinControl и TCustomForm в свой TSkinControl


 
Черный Шаман   (2007-11-29 20:01) [16]


> @!!ex ©   (29.11.07 19:47) [14]
>
> > В Delphi?
>
> Интерфейсы.


Интрефейсы определяют правила вызова методов, а вот код в интерфейсе задать нельзя.


 
KSergey ©   (2007-11-30 08:44) [17]

> Черный Шаман   (29.11.07 17:59) [7]
> функциях есть еще удобное различие по namespace.

Нек забываем, что отдельный юнит - это отдельный namespace. Его (название юнита) можно (а иногда нужно) смело приписывать перед именем объявлений юнита через точку.
Беда только, что одновременно с uses в дельфи автоматически как бы происходит и аналогичный using...


 
Юрий Зотов ©   (2007-11-30 09:09) [18]

> Черный Шаман   (29.11.07 17:38)  

> Есть некоторые функции для работы с классическим Canvas, по типу
> хитрого рястягивания картинки с отступами масштабирования,
> отражением картинки, альфауровнем картинки...

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

Но зачем же искусственно впихивать эти функции в классы, к которым они не имеют никакого отношения? Вот ЭТО как раз и нелогично. Тем более, что в Вашем случае это приведет к дублированию кода.

Поэтому стоит сделать отдельные функции, а из Ваших классов просто вызывать их.

А вот чего НЕ стоит делать, так это:

1. Упираться в какую-то одну методологию, заведомо отметая другие.

2. Искусственно привносить в Delphi несвойственные ей ограничения - в том числе, ограничения джавы. В джаве, как известно "все есть класс", поэтому там невозможно использовать ни отдельные константы, ни отдельные функции - все приходится заворачивать в классы. А в результате начинается плождение классов, содержащих лишь поля и методы в духе public static final. И что же тут хорошего? Только лишние накладные расходы и лишние тормоза, ничего более.



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2007.12.30;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.006 c
15-1196522422
Lip
2007-12-01 18:20
2007.12.30
Переведите на англ. язык, пожалуйста!


9-1164757810
_Andru_
2006-11-29 02:50
2007.12.30
Кому-то нужны сырцы двигла?=)


2-1197017050
brother
2007-12-07 11:44
2007.12.30
быстрая выборка из кучи


15-1196407736
Kerk
2007-11-30 10:28
2007.12.30
OleError 800A03EC


2-1196700305
aleko
2007-12-03 19:45
2007.12.30
перехват WM_QUERYENDSESSION





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский