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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> А стоит ли жить без наследования?.. Пистолет заряжен... Курок взведен... 
:(
    Опции темы
mlitkin
Дата 18.4.2008, 01:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я понимаю, что уже много чего сказано по этой теме, и что нормального (в понимании программиста, всю сознательную жизнь писавшего на Delphi) наследования в visual studio 2005 нет, НО... Непонятно одно - как с этим со всем жить??? Есть ли какая-то альтернатива наследованию? Кто как обходит эту ситуацию? Поделитесь опытом. Не понимаю, как можно написать более-менее серьезный проект без наследования!?
P.S.: Помогите человеку заново обрести веру в .net-программирование.
PM MAIL   Вверх
jonie
Дата 18.4.2008, 08:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 5
Всего: 118



язык какой ?
c# вполне себе имеет наследование :
Код

class SomeClass:BaseClass,IComparable,IDisposable
{
 ......
}

в сравнении с Delphi как раз отличий почти нету.
в сравнении с с++ есть : нет множественного наследования реализации, нет приватного и защищенного наследования....


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
mlitkin
Дата 18.4.2008, 09:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я про наследование форм и последующее их редактировании/отображении в дизайнере.
Вот, например: http://www.gotdotnet.ru/Forums/Windows/436460.aspx
PM MAIL   Вверх
vponomarov
Дата 18.4.2008, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 5
Всего: 12



mlitkin, я не знаю как там в 2005-ой студии, но в 2008-ой никаких проблем с визуальным наследием форм нет.
для компонент формы, которые ты хочешь давать изменять потомкам ставишь модификатор доступа protected и без проблем редактируешь их в редакторе.
собственно говоря это вполне ожидаемое поведение, такое же как и при наследовании других классов.
возможно вы просто не до конца разобрались и в 2005-ой данный вопрос также решается?


--------------------
user posted image
user posted image
PM MAIL ICQ   Вверх
tol05
Дата 18.4.2008, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 11
Всего: 170



Цитата(mlitkin @  18.4.2008,  00:41 Найти цитируемый пост)
Я понимаю, что уже много чего сказано по этой теме, и что нормального (в понимании программиста, всю сознательную жизнь писавшего на Delphi) наследования в visual studio 2005 нет

не делайте поспешных выводов.
Да еще в такой категоричной форме smile


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
it_medved
Дата 18.4.2008, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



гыгыгы сначала почитай любую книжку по C# - наследование имеецо))
а чебы наследоватца от любой формы - тут так же само как и с другого класса:
Код

class MyEditBox:TextBox
{
}

и все...
вобшем сначала думай потом пиши smile 
PM MAIL WWW   Вверх
IApple
Дата 18.4.2008, 11:55 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Не ждите нормального ответа от людей, которіе НЕ работали никогда на Делфи... они никогда не видели по-настоящему удобного дизайнера. Это как при совке не могли себе представить 100 сортов колбасы на прилавке да к тому же без очереди в километр.
Но наследование в С# есть, просто все дочерние компоненты по-умолчанию шарп делает private, поэтому их не должно быть видно (и соответственно невозможно редактировать) в потомках, а "ставишь модификатор доступа protected..." не всегда и не для всех компонентов помогает (например DataGridView в потомках будет закрыт "замочком" даже при выставленом public)
Дизайнер студии не умеет с наследованием грамотно работать, поэтому некоторые визуальные компоненты на форме вам нивжисть не изменить в потомках редактором. Ручками в коде - возможно, но грабель там понатыкано... 
Например, для организации мультиязыковой поддержки стандартным методом является выставлять для формы свойство Localizable=True, потом для каждого языка выбрать соответствующий Language и для каждого визуального компонента на этом языке прописать нужные свойства (Text, к примеру). Соответственно студия создаст для формы набор ресурсных файлов для каждого языка. Но как получить записи в ресурсных файлах для колонок от DataGridView, который "на замке" и колонки которого "прикручено ручками" ?!!

Я выкручивался (если упростить) так:
1) проверяю компонент на "наследственность". Ставлю его на голую форму (обязательно "ставишь модификатор доступа protected..." или public), компилирую, создаю форму-наследник от той и смотрю "замкнут" ли компонент. Еслы не замкнут - можно отложить шаманский бубен до лучших времен.
2) Если компонент "закрыт", то в родительской форме я этот компонент НЕ ставлю на форму вообще но делаю под него поле (свойство) соответствующего типа (например protected DataGridView dgv) в "партиал" определении формы сам, ручками. Далее в нужных методах (например сортировка, поиск по гриду) я использую эту переменную (dgv). А вот в форме-потомке я реально кидаю на форму DataGridView, даю ему имя например DGV, могу с ним делать всё, что душе угодно (колоночки на нужных языках). A в конструкторе формы-наследника дописываю после InitializeComponent(); dgv = DGV;

Недостаток такого подхода в том, что длинна такой "наследственности" - ровно одно поколение, если визульный компонент закинут на форму в сыне, для внука уже "замочки"...
PM MAIL   Вверх
werqwrt
Дата 18.4.2008, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(IApple @  18.4.2008,  12:55 Найти цитируемый пост)
Не ждите нормального ответа от людей, которіе НЕ работали никогда на Делфи

с чего вы это взяли

Цитата(IApple @  18.4.2008,  12:55 Найти цитируемый пост)
Делфи... они никогда не видели по-настоящему удобного дизайнера

а что есть такой дизайнер "Делфи"

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


Шустрый
*


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

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




Модератор: Сообщение скрыто.

PM MAIL   Вверх
IApple
Дата 18.4.2008, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Gelis @ 18.4.2008,  12:45)







Цитата(mlitkin @  18.4.2008,  01:41 Найти цитируемый пост)
 Не понимаю, как можно написать более-менее серьезный проект без наследования!?


Цитата

А я лично вообще не понимаю нахрена нужно наследование форм???

Для того-же, для чего существует наследование визуальных компонент и вообще наследование. Очень даже логично иметь в приложении окна с единым для всего приложения интерфейсом и функциональностью. У меня например есть потребность в окошке с гридом (возможно привязаном на биндинсорс, который на датасет), тулбаром и контекстным меню на гриде в котором прикручено соответственно кнопочек для поиска, сортировки, фильтрации и т.д. Очень даже логично иметь родительское окно, в котором это все есть и прикручено одно к другому (например поиск из тулбара и из меню с одинаковыми иконками и вызывают один метод), в котором некоторые функции уже реализованы, а некоторые (зависимые от будущего реального наполнения) будут перекрыты. Грубо говоря, справочник Городов, от справочника Улиц или справочника Губерний мало чем отличается, так почему для каждого из них индивидуально проектировать с нуля интерфейс (формы) и следить за одинаковостью?
Цитата

В одном из проектов на С++ в котором пришлось поучавствовать, так от нечего делать написали кросплатформенную UI-lib. И на формочку контролы кидались с помощью перегруженной <<(C++) и не было никакого дизайнера. И ни разу не было необходимости в наследовании представления. Максимум пару раз наследовали логику или использовали разные логики для представления.

Когда нет возможности, часто ищутся пути при которых нет необходимости...
Я об том и говорю, что прошедшим С++ у которого "никакого дизайнера", дизайнер от VS - уже счастье.
Цитата

Не знаю, кто пишет более-менее серьезный проект, где основная проблема со слоем представления. Основная проблема в более-менее серьезных проектах это бизнес-логика и отсутсвие более-менее понятных требований

А "второстепенные" задачи не требуют решения? Или в их решении использование наследования становится преступлением?
Цитата

а представление второстепенная задача (хотя клиент всегда оценивает юзабилити)

Так может тогда выбросить эти окошки и вернуться к добрым старым текстовым интерфейсным наработкам?
Цитата

(хотя клиент всегда оценивает юзабилити)

Юзабилити не менее важная задача, чем все остальное, а возможно и самая главная. Пренебрегать этим можно только в случае, когда не предвидится ни одной программы-конкурента похожего предназначения.
PM MAIL   Вверх
tol05
Дата 18.4.2008, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 11
Всего: 170



Есть user-controls и есть Forms
Для наследования используются классы Form & UserControl соответственно. Можно наследоваться от своей формы так же, как и от класса Form. Аналогичная ситуация с наследованием от собственного контрола.
Таким образом вид "наследования форм" существует.

Ну а то, что какие-то элементы в классах Form или UserControl являются public, protected, private - это (извините меня) признаки ООП .... и тот, кто не признает право любого класса иметь свои закрытые члены (хотя бы для защиты от ошибок своих же потомков), тот немного ... неправ smile

Но Вы, IApple, вполне можете наследоваться от любого класса в иерархии UI (от Control или даже от object) и определить все члены класса открытыми. Потом компилируете класс и библиотеку и ссылаетесь на нее в проекте, вместо ссылки на System.Windows.Forms

Вот так и решатся все проблемы


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
Gelis
Дата 18.4.2008, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(IApple @  18.4.2008,  13:37 Найти цитируемый пост)
ЦитатаА я лично вообще не понимаю нахрена нужно наследование форм???Для того-же, для чего существует наследование визуальных компонент и вообще наследование. Очень даже логично иметь в приложении окна с единым для всего приложения интерфейсом и функциональностью. У меня например есть потребность в окошке с гридом (возможно привязаном на биндинсорс, который на датасет), тулбаром и контекстным меню на гриде в котором прикручено соответственно кнопочек для поиска, сортировки, фильтрации и т.д. Очень даже логично иметь родительское окно, в котором это все есть и прикручено одно к другому (например поиск из тулбара и из меню с одинаковыми иконками и вызывают один метод), в котором некоторые функции уже реализованы, а некоторые (зависимые от будущего реального наполнения) будут перекрыты. Грубо говоря, справочник Городов, от справочника Улиц или справочника Губерний мало чем отличается, так почему для каждого из них индивидуально проектировать с нуля интерфейс (формы) и следить за одинаковостью?

Я писал, про наследование форм, что в нем необходимости нет, а то о чем вы говорите это наследование логики (см. MVC или PoEAA Фаулера).  Т.е. создаем одну форму, как я уже писал, а наследование делаем в логиках. Т.е. у вас одна форма (представление) и класс логики для этой формы. В случае необходимости создаем класс наследник логики или вешаем несколько логик на одну форму. Можно сделать фабрику логик, которая в зависимости от юзверя создает нужный ему интерфейс. В вашем случае можно еще и UserControl создать.

Цитата(IApple @  18.4.2008,  13:37 Найти цитируемый пост)
Для того-же, для чего существует наследование визуальных компонент и вообще наследование.

Я за наследование, но против наследования форм, если вы внимателльно прочитали, то там написано, что нет необходимости в наследовании интерфейса, а есть необходимость в наследовании логики или в применении нескольких логик к одному представлению (форме). Т.е. форма она отвечает только за отображение данных, а уже отображаемые данные поставляются логикой. При такой модели мы можем легко и просто от одного представления перейти к другому (от Windows к Linux аль Web) или создать несколько видов представлений (Win и Web) одних и тех же данных.


Цитата(IApple @  18.4.2008,  13:37 Найти цитируемый пост)
Я об том и говорю, что прошедшим С++ у которого "никакого дизайнера", дизайнер от VS - уже счастье.

Я писал, что работал с Делфи, потом с VS и считаю, что удобство это дело привычки. А в проекте в котором нет никакого дизайнера был создан 
класс Manager Control - ов, который красивенько выравнивал (сам!!!) контролы на панелях. Еще раз повторюсь что удобство дизайнера дело привычки. Любому перешедшему к Delphi с VS дизайнер Delphi будет казаться неудобным, а из Delphi в VS наоборот.
Цитата(IApple @  18.4.2008,  13:37 Найти цитируемый пост)
Юзабилити не менее важная задача, чем все остальное, а возможно и самая главная.

Я не имел ввиду, что юзабилити не важная задача, но она по моему мнению занимает в 10-ки если не 100-ни раз меньше времени и усилий, чем написание бизнес-логики, поэтому ее легко изменить в случае необходимости. И нафига классный интерфейс с неработающей логикой, что вы клиенту скажете: "Смотрите какой классный интерфейс, но правда все остальное неправильно работает smile"?
P.S: Модераторы: Извиняюсь что тема превращается в религиозные войны.

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


Новичок



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

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



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

Я не имел ввиду, что юзабилити не важная задача, но она по моему мнению занимает в 10-ки если не 100-ни раз меньше времени и усилий, чем написание бизнес-логики, поэтому ее легко изменить в случае необходимости.

Её легко изменить в случае неодходимости если использовать наследование. Если у меня в суперсложном по логике приложении имеется 100 похожих простых справочников, то намного легче изменить их вид, если они наследуются от одного предка. Меняеш предка - все синхронно изменились. В противном случае, прийдется лезть в каждый из сотни и добавлять ручками-с.
PM MAIL   Вверх
mlitkin
Дата 21.4.2008, 02:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(IApple @  18.4.2008,  11:55 Найти цитируемый пост)
Не ждите нормального ответа от людей, которіе НЕ работали никогда на Делфи...

Спасибо за понимание. Но, почитав ответы на свою тему (и вот здесь тоже: http://sql.ru/forum/actualthread.aspx?bid=...8632&pg=-1), я прихожу к выводу, что видимо для .net-проектов действительно применяется иной (относительно той же делфи) подход к проектированию UI... Возможно, действительно подход с одной формой и наследованием бизнес-логики в большинстве случаев оправдывает себя, т.к. с наследованием форм в делфи тоже есть определенные неудобства. Ну например, если есть 30 форм, наследованных от базовой, то изменив положение какого-то контрола в базовой форме, можно поиметь проблемы с взаимным расположением контролов в дочерних формах. В этом случае бывает необходимо открыть каждую и расставить все по местам... В случае с одной формой и несколькими логиками такой проблемы не будет.
PM MAIL   Вверх
IApple
Дата 23.4.2008, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Gelis 
Цитата

Я писал, про наследование форм, что в нем необходимости нет, а то о чем вы говорите это наследование логики (см. MVC или PoEAA Фаулера).

Прочитал, как применить в моем конкретном случае? Если до банальности упростить условия до таких (уж не взыщите, что у меня так сильно к визуальным компонентам привязано): тулбар на 2 кнопки и менюшка на аналогичных 2 пункта меню (сортировка и поиск) для грида на форме.
Цитата

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

Тут совсем не понимаю. Если у меня два однотипных (визуально) справочника Городов и Улиц, то как это стыкуется с тем, что "создаем одну форму" ?
Цитата

В случае необходимости создаем класс наследник логики или вешаем несколько логик на одну форму. Можно сделать фабрику логик, которая в зависимости от юзверя создает нужный ему интерфейс. В вашем случае можно еще и UserControl создать.

Тоже, очень было бы интересно посмотреть на код.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




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


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

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