|
|
|
Константа - не константа
|
|||
|---|---|---|---|
|
#18+
Исходная ситуация: код Delphi, обычные соглашения о стиле кодирования. Есть объект, многие аспекты поведения которого регулируются свойством, допустим, XYMode с возможными значениями xyMode1, xyMode2 и xyMode3 (в принципе расширяемо). С точки зрения бизнес-логики это атомарное свойство, мысль разбить на несколько свойств, регулирующих каждый из аспектов нелепа, с точки зрения реализации же в половине методов в той или иной форме должен присутствовать case XYMode of ... Мне не хочется писать такие вот case, поэтому я поступил так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Таким образом, в исходниках стоит Код: plaintext и в результате модуль начинает работать в режимах, задаваемых классом xyMode1. Собственно, мне любопытны две вещи: 1. Наверняка у такого подхода есть какое-нибудь название среди "стандартных паттернов", хотелось бы услышать. Просто чтобы при необходимости отослать туда. 2. Ваше мнение по поводу именования класса в стиле константы как следствия его употребления в коде вместо константы. Бил программистов по голове. Поцарапал лом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2011, 12:34 |
|
||
|
Константа - не константа
|
|||
|---|---|---|---|
|
#18+
softwarer1. Наверняка у такого подхода есть какое-нибудь название среди "стандартных паттернов", хотелось бы услышать. Просто чтобы при необходимости отослать туда.Похоже на это . softwarer2. Ваше мнение по поводу именования класса в стиле константы как следствия его употребления в коде вместо константы.Если средства языка позволяют - почему бы и нет. В традиционном варианте, экземпляр юзается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2011, 14:10 |
|
||
|
Константа - не константа
|
|||
|---|---|---|---|
|
#18+
softwarer1. Наверняка у такого подхода есть какое-нибудь название среди "стандартных паттернов", хотелось бы услышать. Просто чтобы при необходимости отослать туда.паттерн "состояние" или "стратегия" , они похожи, если смотреть с этой стороны ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2011, 14:13 |
|
||
|
Константа - не константа
|
|||
|---|---|---|---|
|
#18+
softwarer, исходники txmldocument: TXMLDocument = class(TComponent, IInterface, IXMLDocument, IXMLDocumentAccess) ... published property DOMVendor: TDOMVendor read FDOMVendor write SetDOMVendor; ... ... и в результате: procedure TXMLDocument.SetActive(const Value: Boolean); begin ... FDOMDocument := DOMImplementation.createDocument ('', '', nil); end; это борланд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2011, 18:37 |
|
||
|
Константа - не константа
|
|||
|---|---|---|---|
|
#18+
eNose, боюсь, не вижу тут ничего похожего на исходный вопрос :) Меч, егорыч - благодарю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2011, 19:34 |
|
||
|
Константа - не константа
|
|||
|---|---|---|---|
|
#18+
softwarereNose, боюсь, не вижу тут ничего похожего на исходный вопрос :) зря. там как раз по исходному вопросу, просто я не стал копипастить килобайты кода, который легко найти :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2011, 19:36 |
|
||
|
Константа - не константа
|
|||
|---|---|---|---|
|
#18+
softwarer2. Ваше мнение по поводу именования класса в стиле константы как следствия его употребления в коде вместо константы. Красиво конечно, но как-то не то... Лучше использовать паттерн "стратегия" в стандартном исполнении. Тем более, что объект класса может создаватся с параметрами в конструкторе. Решение не гибкое, получается. Да и не нужно все задачи сводить к максимальному использовании свойств [property], не всегда это уместно, как мне кажется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2011, 14:32 |
|
||
|
Константа - не константа
|
|||
|---|---|---|---|
|
#18+
MAYAKOV_SVТем более, что объект класса может создаватся с параметрами в конструкторе. Резонно. Но мне как-то ни разу в жизни не требовалось создавать константу true или false с параметрами в конструкторе :) MAYAKOV_SVДа и не нужно все задачи сводить к максимальному использовании свойств [property], не всегда это уместно, как мне кажется. Безусловно. Я с интересом выслушаю альтернативные предложения в задаче "объекту должен задаваться режим работы (одно из трёх на текущий момент возможных значений); должна быть возможность узнать текущий режим работы объекта". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2011, 15:47 |
|
||
|
Константа - не константа
|
|||
|---|---|---|---|
|
#18+
softwarer Я с интересом выслушаю альтернативные предложения в задаче "объекту должен задаваться режим работы (одно из трёх на текущий момент возможных значений); должна быть возможность узнать текущий режим работы объекта". Раз уж со свойствами, то может быть так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Код: plaintext 1. Обычно стратегия сама по себе не работает, а пользуется ссылками на другие объекты. Поэтому использование конструктора с параметрами - вполне обычное явление для паттерна "стратегия", хотя и не обязательная. Хотя можно и обойтись и инструкцией case и обычым свойством, которой номер стратегии указывает. Тут нужно по ситуации смотреть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2011, 16:37 |
|
||
|
Константа - не константа
|
|||
|---|---|---|---|
|
#18+
MAYAKOV_SVРаз уж со свойствами, то может быть так: Может, но зачем? В результате вместо Код: plaintext мы имеем Код: plaintext Вместо Код: plaintext мы имеем Код: plaintext И всё это ради того, чтобы, условно, иметь возможность параметризовать объект "год" количеством месяцев. Имхо неактуально. Я понимаю, что в этом месте у читателя рефлекторно возникает желание сказать, мол, календарь бывает не только григорианский, и кое у кого бывает и 13 месяцев. Всё правильно, я, условно говоря, собираюсь создать классы ЮлианскийКалендарь, ГригорианскийКалендарь, ЕврейскийКалендарь, КалендарьМайа, подставлять их в нужное место и не вижу никакой причины их параметризовать, ни сейчас, ни в разумной перспективе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2011, 16:50 |
|
||
|
Константа - не константа
|
|||
|---|---|---|---|
|
#18+
softwarerИмхо неактуально. Мож я напутал чего, но подставляю я стратегию, поэтому путаница в терминах. Module.XYStrategy := TXYStrategy1.Create(...); Да и у атомарного свойства вряд ли может быть такое: function Something (..); virtual; abstract; Поэтому Вам нужно определится, что же Вам нужно реализовать: простое свойство или паттерн "стратегия"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2011, 17:04 |
|
||
|
Константа - не константа
|
|||
|---|---|---|---|
|
#18+
MAYAKOV_SVПоэтому Вам нужно определится, что же Вам нужно реализовать: простое свойство или паттерн "стратегия"? Что мне нужно реализовать, вроде бы вполне полно описано в первом посте топика. Могу точно сказать, что мне не нужно реализовывать паттерн, "стратегия" или какой иной. Мне нужно хорошо решить задачу, и я ничего не имею против, если найденное хорошее решение совпадёт с тем, что некие люди называют тем или иным паттерном. MAYAKOV_SVДа и у атомарного свойства вряд ли может быть такое: function Something (..); virtual; abstract; Ну возьмите предыдущий пример с календарями и представьте себе методы Код: plaintext 1. Вы предложите реализовать иначе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2011, 17:09 |
|
||
|
Константа - не константа
|
|||
|---|---|---|---|
|
#18+
softwarerВы предложите реализовать иначе? Да вообще по-разному можно, Ваш вариант вполне работоспособен. Я конечно много лишнего тут понаписал, не сообразил сразу, не судите строго. softwarerименования класса в стиле константы как следствия его употребления в коде вместо константы Это меня и сбило с толку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2011, 19:45 |
|
||
|
Константа - не константа
|
|||
|---|---|---|---|
|
#18+
softwarer, Обджект паскаль не очень хорош для паттернов ( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2011, 21:47 |
|
||
|
Константа - не константа
|
|||
|---|---|---|---|
|
#18+
softwarer... Код: plaintext 1. Вы предложите реализовать иначе?Мне всегда казалось, что нужно как-то так: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2011, 22:51 |
|
||
|
Константа - не константа
|
|||
|---|---|---|---|
|
#18+
Siemarglsoftwarer, Обджект паскаль не очень хорош для паттернов (Почему? И какой язык тогда "подходящий"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2011, 23:06 |
|
||
|
Константа - не константа
|
|||
|---|---|---|---|
|
#18+
Яростный Меч, В данном конкретном случае - возможностей Object Pascal достаточно. Но удобнее будут и C# и D и Java. Возможно, языки с динамической типизацией здесь (в паттернах) дадут фору всем остальным. Например Python. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2011, 09:31 |
|
||
|
Константа - не константа
|
|||
|---|---|---|---|
|
#18+
И да. Если выбор варианта программы производится разработчиком, то еще же есть условная компиляция. В Дельфи она в зачаточном состоянии, в C++ #if defined(A) && !defined(B) D позволяет уже CTFE и чуть более продвинутые version(clientcode) { /// ..... } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2011, 10:05 |
|
||
|
Константа - не константа
|
|||
|---|---|---|---|
|
#18+
SiemarglОбджект паскаль не очень хорош для паттернов ( Cкорее, (стандартные) паттерны не очень хороши для обжект паскаля. Поскольку заточены под примитивные возможности с++-объектной модели. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2011, 11:07 |
|
||
|
Константа - не константа
|
|||
|---|---|---|---|
|
#18+
softwarer, у С++ нет ни объектной, ни какой другой модели, зато на С++ можно написать любую модель. Понятие "стандартный" паттерн тоже, в общем-то не особо имеет смысл, кмк. С пассажем Siemargla про обджект паскаль не согласен, потому что для паттернов достаточно иметь в языке поддержку наследования, больше ничего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2011, 11:21 |
|
||
|
Константа - не константа
|
|||
|---|---|---|---|
|
#18+
softwarerSiemarglОбджект паскаль не очень хорош для паттернов ( Cкорее, (стандартные) паттерны не очень хороши для обжект паскаля. Поскольку заточены под примитивные возможности с++-объектной модели. Да можно реализовывать стандартные паттерны на обджект паскале. Проблем особых нету, по крайней мере я не встречал серьезные трудности. Паттерн - это идея, а реализуется она уже в соответствии со спецификой языка. Просто обычно программисты, работающие на дельфи (из тех, котрых я видел), не очень активно используют ООП технологии, и стараются пользоваться по большей части возможностями среды разработки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2011, 11:26 |
|
||
|
Константа - не константа
|
|||
|---|---|---|---|
|
#18+
egorychsoftwarer, у С++ нет ни объектной, ни какой другой модели, зато на С++ можно написать любую модель. Никакой модели нет у машинного кода, ну это если не считать прорвы заточек на модель процессора. У ассемблера модель уже есть - например, в ней не предусмотрено использование части команды как другой команды. И так далее. Хотя, конечно, на инструменте любой модели можно написать инструмент, поддерживающий другую модель. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2011, 11:39 |
|
||
|
Константа - не константа
|
|||
|---|---|---|---|
|
#18+
softwarerХотя, конечно, на инструменте любой модели можно написать инструмент, поддерживающий другую модель......более высокого уровня абстракции, я бы дополнил всё таки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2011, 12:23 |
|
||
|
Константа - не константа
|
|||
|---|---|---|---|
|
#18+
egorych...более высокого уровня абстракции, я бы дополнил всё таки. Не обязательно. Никто не мешает на С++ написать эмулятор процессора Intel 4004. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2011, 12:35 |
|
||
|
|

start [/forum/topic.php?fid=16&fpage=89&tid=1343106]: |
0ms |
get settings: |
6ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
25ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
65ms |
get tp. blocked users: |
1ms |
| others: | 198ms |
| total: | 321ms |

| 0 / 0 |
