U>interface IWorker
U>{
U> int Work();
U>}
U>class ConcreteWorker : IWorker
U>{
U> public int Work() { ... }
U>}
U>
U>Жду стратегии на математическом языке.
То, что вы написали — это никакой не паттерн стратегия. Разница такая же, как между 3 и множеством целых чисел. Паттерн стратегия, это вовсе не этот ваш код, а функция, которая получив ваш код на вход вернет значение "истина", а получив на вход что-то стратегией не являющееся — "ложь".
Паттерны это или классы классов объектов, которые в большинстве языков программирования не выражаются, либо еще и функции отображающие из одного класса объектов в другой. К примеру, некоторые паттерны, вроде фасада (F : T -> T) и адаптера (A : U -> V) — это комбинаторы объектов. В подавляющем большинстве языков они не могут быть выражены, они существуют только в уме программиста, а в языке выражается результат их работы в уме программиста.
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Здравствуйте, D. Mon, Вы писали:
DM>Здравствуйте, Mamut, Вы писали:
M>>Математика M>>circle = [(x, y) | X ∈ R, sin(x) + cos(x) = 1]
DM>
Ну будет зебра ограниченная кругом, вполне себе ничего.
Здравствуйте, Klapaucius, Вы писали:
K>То, что вы написали — это никакой не паттерн стратегия. Разница такая же, как между 3 и множеством целых чисел. Паттерн стратегия, это вовсе не этот ваш код, а функция, которая получив ваш код на вход вернет значение "истина", а получив на вход что-то стратегией не являющееся — "ложь".
Это вы откуда такое определение стратегии взяли и какая от него польза при написании программ?
Под паттерном стратегия я понимал это: http://ru.wikipedia.org/wiki/Стратегия_(шаблон_проектирования) И вот такая стратегия мне нужна, т.к. позволяет решать реальные задачи гораздо проще, а то что вы называете стратегией мне даром не надо.
Здравствуйте, Undying, Вы писали:
K>>То, что вы написали — это никакой не паттерн стратегия. Разница такая же, как между 3 и множеством целых чисел. Паттерн стратегия, это вовсе не этот ваш код, а функция, которая получив ваш код на вход вернет значение "истина", а получив на вход что-то стратегией не являющееся — "ложь". U>Это вы откуда такое определение стратегии взяли и какая от него польза при написании программ?
Это формализация понятия "паттерн". Как мне формально определить является ли заданный код реализацией какого-либо паттерна?
U>Под паттерном стратегия я понимал это: http://ru.wikipedia.org/wiki/Стратегия_(шаблон_проектирования) И вот такая стратегия мне нужна, т.к. позволяет решать реальные задачи гораздо проще, а то что вы называете стратегией мне даром не надо.
Ты просто не понимаешь что тебе говорят, и всё.
Здравствуйте, Mystic, Вы писали:
M>Рассуждения вообще бессмысленны, в математике ты должен все рассуждения идут в рамках некоторой теории со своим набором аксиом. Стандарты всех языков программирования можно понимать как неформальное описание такой системы аксиом. После чего текст на языке программирования становится автоматически формальным математическим текстом (= математический язык).
Ценность твоего рассуждения такая же как то, что любой объект реального мира состоит из атомов, соответственно любой новый объект автоматически становится набором атомов. Формально все верно, но бессмысленно, т.к. решению задач никак не помогает.
Здравствуйте, Mamut, Вы писали:
M>>>>Математика M>>>>circle = [(x, y) | X ∈ R, sin(x) + cos(x) = 1]
DM>>> D>>Ну будет зебра ограниченная кругом, вполне себе ничего. M>Ээээ. А это разве не единичный круг я описал?
Вообще-то, нет Должно быть: sin(x)^2+cos(x)^2 = 1
Здравствуйте, Cyberax, Вы писали:
C>Это формализация понятия "паттерн". Как мне формально определить является ли заданный код реализацией какого-либо паттерна?
Нет такой задачи определить является ли код реализацией паттерна. Есть задача разработать приемы позволяющие решать задачи проще. Паттерн стратегия одним из таких приемов является, а есть ли у нас строго формальный способ определить был ли в коде реализован этот паттерн или нет это уже дело десятое.
Паттерн стратегия это еще очень примитивный пример, который имеет достаточно однозначное отражение в коде. Более сложный пример это приемы проектирования, в общем случае по коду вообще невозможно установить какие приемы проектирования при разработке были использованы, что нисколько не мешает приемам проектирования объективно существовать и делать возможной разработку сложнейших систем. Несмотря на то что эти приемы крайне сложно формализовать даже на естественном языке и совершенно невозможно на математическом.
C>Ты просто не понимаешь что тебе говорят, и всё.
Это неудивительно, т.к. у меня технический склад ума, а у вас математический. Соответственно для меня математика всего лишь инструмент, а для вас это абсолютно все.
Здравствуйте, Cyberax, Вы писали:
M>>>>>circle = [(x, y) | X ∈ R, sin(x) + cos(x) = 1] M>>Ээээ. А это разве не единичный круг я описал? :) C>Вообще-то, нет :) Должно быть: sin(x)^2+cos(x)^2 = 1
Здравствуйте, Mamut, Вы писали:
M>>>>Математика M>>>>circle = [(x, y) | X ∈ R, sin(x) + cos(x) = 1]
DM>>> D>>Ну будет зебра ограниченная кругом, вполне себе ничего.
M>Ээээ. А это разве не единичный круг я описал?
Ты зебру описал, т.е множество точек (x = n * pi/2, y in (-inf,inf)) , для круга условие x*x+y*y < 1, например или Y < 1 в полярной системе.
Здравствуйте, Cyberax, Вы писали:
C>Здравствуйте, Mamut, Вы писали:
M>>>>>Математика M>>>>>circle = [(x, y) | X ∈ R, sin(x) + cos(x) = 1]
DM>>>> D>>>Ну будет зебра ограниченная кругом, вполне себе ничего. M>>Ээээ. А это разве не единичный круг я описал? C>Вообще-то, нет Должно быть: sin(x)^2+cos(x)^2 = 1
А это вообще вся плоскость.
Здравствуйте, Undying, Вы писали:
U>Ценность твоего рассуждения такая же как то, что любой объект реального мира состоит из атомов, соответственно любой новый объект автоматически становится набором атомов. Формально все верно, но бессмысленно, т.к. решению задач никак не помогает.
Здравствуйте, Undying, Вы писали:
U>Паттерн стратегия это еще очень примитивный пример, который имеет достаточно однозначное отражение в коде. Более сложный пример это приемы проектирования, в общем случае по коду вообще невозможно установить какие приемы проектирования при разработке были использованы, что нисколько не мешает приемам проектирования объективно существовать и делать возможной разработку сложнейших систем. Несмотря на то что эти приемы крайне сложно формализовать даже на естественном языке и совершенно невозможно на математическом. Design Patterns as Higher-Order Datatype-Generic Programs
ну а стратегия — это ФВП для бедных
apply(f,x) = f(x)
Здравствуйте, Qbit86, Вы писали:
U>>Паттерн стратегия это еще очень примитивный пример, который имеет достаточно однозначное отражение в коде. Q>Нет. Паттерн Стратегия выглядит точно так же (вплоть до UML-диаграммы), как и паттерн Состояние. И тем не менее, это разные паттерны.
Т.е. ты подтверждаешь мою точку зрения, что никакого отношения к математики паттерны не имеют, т.к. им невозможно дать строго формализованное определение?
Здравствуйте, Qbit86, Вы писали:
U>>Ценность твоего рассуждения такая же как то, что любой объект реального мира состоит из атомов, соответственно любой новый объект автоматически становится набором атомов. Формально все верно, но бессмысленно, т.к. решению задач никак не помогает.
Q>Это называется редукционизм.
Да, согласен, люди, для которых математика является самоценностью, это редукционисты.
Здравствуйте, Undying, Вы писали:
Q>>Это называется редукционизм.
U>Да, согласен, люди, для которых математика является самоценностью, это редукционисты.
Для меня, например, математика является самоценностью, но я не редукционист :)
Здравствуйте, Undying, Вы писали:
U>Т.е. ты подтверждаешь мою точку зрения, что никакого отношения к математики паттерны не имеют, т.к. им невозможно дать строго формализованное определение?
Не совсем, они могут иметь какое-то отношение к математике, даже если вдруг им невозможно дать строгого формального определения.
Здравствуйте, Undying, Вы писали:
U>Здравствуйте, Mystic, Вы писали:
U>Ценность твоего рассуждения такая же как то, что любой объект реального мира состоит из атомов, соответственно любой новый объект автоматически становится набором атомов. Формально все верно, но бессмысленно, т.к. решению задач никак не помогает.
На самом деле математика лежит на поверхности, просто очень много людей, программирующих на C#, не знакомы с теорией множеств, графами, так что зачем сужать потенциальную аудиторию? Нужно определение стратегии? Берем за основу этот рисунок
Моментально получаем
Говорят, что классы c1, c2, c3 образуют паттерн стратегия, если
(1) классы с2 и с3 наследуются от c1, и при этом перекрывают виртуальный метод a;
(2) существует такой класс c4, содержащий метод m, который вызывает метод a у класса c1.
Дальше аналогично можно определить все остальные нюансы, но чисто техническая несложная работа.