Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Объектно-ориентированный анализ и проектирование 
:(
    Опции темы
 
Используете ли вы объектно-ориентированный анализ и проектирование в своих проектах?
А что это такое? [ 49 ]  [18.01%]
Слышал об этом, но толком не знаю [ 56 ]  [20.59%]
Знаю основы, но не использую [ 42 ]  [15.44%]
Использую иногда [ 65 ]  [23.90%]
Использую в каждом проекте [ 60 ]  [22.06%]
Всего проголосовавших: 272
В этом опросе возможен один вариант ответа
Гости не могут голосовать 
izekia
Дата 12.12.2007, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 5.12.2007

Репутация: 1
Всего: 3



мне понравилось одно высказывание, точно не помню чье:
что-то вроде того что сначала когда вы начинаете знакомится с паттернами вам все это нравится,
потом начинаете пытаться применять, потом понимаете, что они полностью бесполезны и бросаете эту затею, и в конце концов ловите себя на том, что все-таки используете их
PM MAIL   Вверх
Exception
Дата 14.2.2008, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



izekia, если точнее, это сказал Грег Ирвин, и звучало оно так:

Цитата

"For me, many concepts, like patterns, are learned in stages:

   1. You use it without being aware that you're using it
   2. You hear about it, read up on it, and tinker a bit
   3. You learn more and start using it explicitly, if naïvely
   4. You get the fire and evangelize (optional)
   5. Something "clicks"
   6. You learn more and apply it "less naïvely" and more implicitly
   7. Time passes and you see flaws
   8. You question the concept (often because you misapplied it)
   9. You either forget about it or add knowledge and experience

      (Repeat steps 5–9 as necessary)

  10. You use it without being aware that you're using it" 


smile

А вообще, я сейчас стараюсь совмещать небольшое проектирование на основе модели предметной области, TDD и рефакторинг -- очень нравится, гораздо эффективнее всё получается.
PM   Вверх
Medved
Дата 15.2.2008, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 3
Всего: 154



Цитата(Dimass @  12.7.2007,  13:57 Найти цитируемый пост)
По этому поводу добавлю хороший источник  ->  Э.Гамма, Э.Хелм и др.  Приемы объектно-ориентированного проектирования паттерны проектирования. 


Это классика. К прочтению обязательна.


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
Gelis
Дата 5.4.2008, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 26.10.2006
Где: Брест

Репутация: 2
Всего: 4



Цитата(Exception @  14.2.2008,  22:53 Найти цитируемый пост)
TDD и рефакторинг -- очень нравится

А еще, если к этому прикрутить Design Patterns вообще вещь получается.
Рекомендую по этому поводу книженцию Джошуа Кириевски "Рефакторинг с использованием шаблонов".

PM MAIL   Вверх
firstone
Дата 10.4.2008, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 25.9.2007
Где: Кровью залитая Св ятая Земля

Репутация: 1
Всего: 7



UML Применяю всегда. Design Patterns всегда. А если мой работодатель хочет Fast & Dirty то пусть ищет другого программиста.

--------------------
В программировании я конфуцианец. В жизни я либерал-демократ. В душе я буддист.Добавлено через 1 минуту и 9 секундА на самом деле я лентяй.
PM MAIL   Вверх
Real
Дата 10.4.2008, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 507
Регистрация: 9.11.2007

Репутация: 1
Всего: -1



ООП из книге "Для профессионалов .NET 3.0" - http://depositfiles.com/files/4594993
PM   Вверх
ivashkanet
Дата 11.4.2008, 08:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(Exception @  14.2.2008,  22:53 Найти цитируемый пост)
   7. Time passes and you see flaws
   8. You question the concept (often because you misapplied it)
   9. You either forget about it or add knowledge and experience

Я сейчас нахожусь в этой стадии smile Оставил только самые простые паттерны.
И больше обращаю внимание на бестпрактики, чем на паттерны.
Цитата(Exception @  14.2.2008,  22:53 Найти цитируемый пост)
небольшое проектирование на основе модели предметной области

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


PM MAIL WWW ICQ   Вверх
ivashkanet
Дата 11.4.2008, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(Medved @  15.2.2008,  12:36 Найти цитируемый пост)
Цитата(Dimass @  12.7.2007,  13:57 Найти цитируемый пост)
По этому поводу добавлю хороший источник  ->  Э.Гамма, Э.Хелм и др.  Приемы объектно-ориентированного проектирования паттерны проектирования. 


Это классика. К прочтению обязательна.

Мое мнение: 
рекомендуя эту книгу человеку  не знакому с паттернами я бы все же изъял некоторые из них, которые часто неправильно понимаются и как следствие используются не там где надо, что больше усложняет код чем наоборот :( 

К таким могу отнести:
Мост (Bridge) про этот паттерн до сих пор спорят архитекторы и не могут приди к единому мнению -- в сад!
Строитель (Builder) сам не использовал -- не сталкивался с объектами требующими сложного конструирования.
]Комманда -- в большинстве случаев приводит к усложнению кода
Но в случаях когда она действительна нужна она незаменима, только вот трудновато новичку их определить. Я благодарин моему другу, что он отговорил меня его использовать в моем проекте (а было ох какое желание и тогда я думал, что он очень грамотно ложиться на задачу).
Цепочка обязанностей (Chain of Responsibility) -- см. команда, только попроще распознать нужен ли он тебе.
... 
Дописал до сих пор и понял, что все эти паттерны (кроме Моста, этот вообще жесть -- запутаться в нем раз плюнуть) при использовании не к месту всегда приводят к усложнению кода. Т.о. самая главная задача определить -- а оно тебе надо? Поэтому начинающему архитектору лучше о них не знать smile

Продолжу перечисление:
Компоновщик (Composite)Интерпретатор (пример сложного паттерна, но его врятли начинающий рискнет использовать), Медиатор (лучше сразу MVC, MVP...), Посетитель (Visitor).

В противовес, паттерны которые должен знать каждый! разработчик:
АдаптерФасадИтератор (хотя и встроен в современные языки, многи не понимают что это и зачем), Хранитель (Memento)Наблюдатель (Observer) (грамотно реализован в .Net с поможью событий), СинглтонСостояние (State)

Более сложные (знать не обязательно, но желательно): 
Фабричный методДекораторПрокси (Proxy)


Вот такое мое ИХМО.

Это сообщение отредактировал(а) ivashkanet - 11.4.2008, 09:17
PM MAIL WWW ICQ   Вверх
ivashkanet
Дата 11.4.2008, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Еще раз подчеркну:
Цитата(ivashkanet @  11.4.2008,  08:43 Найти цитируемый пост)
Цитата(Exception @  14.2.2008,  22:53 Найти цитируемый пост)
небольшое проектирование на основе модели предметной области

Для нашего уровня проектоектов это наиболее полезный "паттерн".  


PM MAIL WWW ICQ   Вверх
firstone
Дата 13.4.2008, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 25.9.2007
Где: Кровью залитая Св ятая Земля

Репутация: 1
Всего: 7



Билдер можно использовать тогда, когда нужно построить объекты одного класса, но с разными значениями свойств. Например, если есть класс пакетов протокола, в которых все поля одинаковы, но имеют разные значения в зависимости от задач пакета, то наследование здесь будет лишне. С другой стороны, если полей такиx много, то стоит взвесить целесообразность билдера. Т.е. вместо:

Код

public class APDU // Application Protocol Data Unit
{
private byte field1Value;
private byte field2Value;
private byte field3Value;
private byte field4Value;
private byte field5Value;
...

public byte field1{get { return this.field1Value; } set { this.field1Value = value; }}
public byte field1{get { return this.field2Value; } set { this.field2Value = value; }}
public byte field1{get { return this.field3Value; } set { this.field3Value = value; }}
public byte field1{get { return this.field4Value; } set { this.field4Value = value; }}
public byte field1{get { return this.field5Value; } set { this.field5Value = value; }}
...

}

public class APDUDirector
{
public static manage()
{

APDU getInfoAPDU = new APDU();
getInfoAPDU.field1 = 0x01;
getInfoAPDU.field2 = 0x02;
getInfoAPDU.field3 = 0x03;
getInfoAPDU.field4 = 0x04;
getInfoAPDU.field5 = 0x05;
...

SerialPort port = new SerialPort("COM1");
port.write(getInfoAPDU);

APDU installAppAPDU = new APDU();
installAppAPDU.field1 = 0x0A;
installAppAPDU.field2 = 0x0B;
installAppAPDU.field3 = 0x0C;
installAppAPDU.field4 = 0x0D;
installAppAPDU.field5 = 0x0E;
...

port.write(installAppAPDU);
}
}


Код

public abstract class APDUBuilder
{
protected APDU builtAPDU = null;

public abstract void build();

public APDU getConstructedAPDU()
{
return builtAPDU;
}

// Some common routines
...
}

public class GetInfoAPDUBuilder : APDUBuilder
{
public override void build()
{
this.builtAPDU = new APDU();

this.builtAPDU.field1 = 0x01;
this.builtAPDU.field2 = 0x02;
this.builtAPDU.field3 = 0x03;
this.builtAPDU.field4 = 0x04;
this.builtAPDU.field5 = 0x05;
}
}

public class InstallAppAPDUBuilder : APDUBuilder
{
public override void build()
{
this.builtAPDU = new APDU();

this.builtAPDU.field1 = 0x0A;
this.builtAPDU.field2 = 0x0B;
this.builtAPDU.field3 = 0x0C;
this.builtAPDU.field4 = 0x0D;
this.builtAPDU.field5 = 0x0E;
}
}

public class APDUDirector
{
public static manage()
{

SerialPort port = new SerialPort("COM1");

APDUBuilder builder = new GetInfoAPDUBuilder();
builder.build();
APDU getInfoAPDU = builder.getConstructedAPDU();

port.write(getInfoAPDU);

builder = new InstallAppAPDUBuilder();
builder.build();
APDU installAppAPDU = builder.getConstructedAPDU();

port.write(installAppAPDU);
}
}

--------------------
В программировании я конфуцианец. В жизни я либерал-демократ. В душе я буддист.Добавлено через 1 минуту и 9 секундА на самом деле я лентяй.
PM MAIL   Вверх
firstone
Дата 13.4.2008, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 25.9.2007
Где: Кровью залитая Св ятая Земля

Репутация: 1
Всего: 7



Цитата(ivashkanet @  11.4.2008,  09:15 Найти цитируемый пост)
Комманда -- в большинстве случаев приводит к усложнению кода

У меня как раз Command всегда все упрощал. Это хороший способ инкапсулировать все, что относится к одному действию. Кроме того, этот паттерн позволяет строить иерархию комманд (Composite) или под-команды (когда одно действие состоит из нескольких более простых действий).

Добавлено через 2 минуты и 34 секунды
Цитата(ivashkanet @  11.4.2008,  09:15 Найти цитируемый пост)
(Composite)

По-сути любая иерархичная структура реализует этот паттерн.
Цитата(ivashkanet @  11.4.2008,  09:15 Найти цитируемый пост)
Посетитель (Visitor).

Хороший пример использования - обход дерева файлов проекта при компиляции.

Добавлено через 6 минут и 37 секунд
Цитата(firstone @  13.4.2008,  12:54 Найти цитируемый пост)
По-сути любая иерархичная структура реализует этот паттерн.

Извините, этo я погорячился.
--------------------
В программировании я конфуцианец. В жизни я либерал-демократ. В душе я буддист.Добавлено через 1 минуту и 9 секундА на самом деле я лентяй.
PM MAIL   Вверх
ivashkanet
Дата 13.4.2008, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(firstone @  13.4.2008,  12:54 Найти цитируемый пост)
У меня как раз Command всегда все упрощал.

firstone, Перечитай мой пост. Все паттерны упрощают разработку, если используются к месту. А использование их не к месту все только усложныет. 
И очень часто тяжело понять нужен он или нет, вот про это я и говорл.
Цитата(firstone @  13.4.2008,  12:54 Найти цитируемый пост)
Хороший пример использования - обход дерева файлов проекта при компиляции.

И ты считаешь это не сложный пример?

Еще раз: все паттерны хороши, но для их грамотного применения нужен опыт и знания. Паттернам, которые я выделил, нужно намного больше знаний и опыта, чем другим. Вот и все.
PM MAIL WWW ICQ   Вверх
firstone
Дата 13.4.2008, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 25.9.2007
Где: Кровью залитая Св ятая Земля

Репутация: 1
Всего: 7



ivashkanet, Во всем согласен. Простo я не в том ключе прочитал Ваш пост.

Добавлю  свое ИМХО по аналогии Вашего.

Должны знать: Factory, Factory method, Decorator, Adapter, Facade, Iterator, Proxy, Command, Memento, Observer, Composite, Mediator(?)

Необязательно: Chain of responsibility, Bridge, Builder, Visitor, (Mediator)


Собственно, Mediator - слишком пространственный паттерн. Наверняка его применяли все, простo не давали себе в этом отчет.
--------------------
В программировании я конфуцианец. В жизни я либерал-демократ. В душе я буддист.Добавлено через 1 минуту и 9 секундА на самом деле я лентяй.
PM MAIL   Вверх
ivashkanet
Дата 14.4.2008, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(firstone @  13.4.2008,  12:18 Найти цитируемый пост)
Билдер можно использовать тогда, когда нужно построить объекты одного класса, но с разными значениями свойств

А вот и не правда smile Для этого случая больше подходит прототип (один из обязательных паттернов).

А билдер нужен тогда, когда нужно создать один объект, но создавать его можно из разных источников.

В ГоФ-е дают пример про RTF документ, который билдиться из разных источников: обычного текста, TeX-файла, ...

Добавлено через 13 минут и 32 секунды
И еще, немного пересмотрел свой список ( smile ) исключив из него сложные паттерны, но которые тяжело использовать не там где надо smile
Это например Компоновщик (Composite). О нем хорошо бы просто знать.
Потому что для работы с графикой (нарисовать три линии, квадратик, а внурти треугольник smile ) он нужен просто как воздух.
PM MAIL WWW ICQ   Вверх
firstone
Дата 14.4.2008, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 25.9.2007
Где: Кровью залитая Св ятая Земля

Репутация: 1
Всего: 7



Цитата(ivashkanet @  14.4.2008,  09:20 Найти цитируемый пост)
А вот и не правда smile Для этого случая больше подходит прототип (один из обязательных паттернов).

А билдер нужен тогда, когда нужно создать один объект, но создавать его можно из разных источников.

Все же позвольте мне с Вами не согласиться.

В моем примере prototype и builder одинаково применимы. Я считаю, что билдер подходит больше из-за полного отсутствия разницы между классами. Потом некоторый customizing объектов все же необходим, так что после Clone()-а все равно надо будет менять какие-то свойстава. Хотя в обшем и прототип тут тоже сойдет и фактори. 
--------------------
В программировании я конфуцианец. В жизни я либерал-демократ. В душе я буддист.Добавлено через 1 минуту и 9 секундА на самом деле я лентяй.
PM MAIL   Вверх
Страницы: (5) Все 1 2 [3] 4 5 
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1321 ]   [ Использовано запросов: 23 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.