1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.

.NET 3 и WPF - новая эра интерфейсов?

Тема в разделе "Программирование", создана пользователем DirectX, 05.08.07.

  1. DirectX

    DirectX Активный участник

    1.873
    0
    Не так уж давно фирма MS разродилась релизом dotnet 3. Собственно, в отличие от прочих фреймворков, на первый взгляд он показался несколько легковесным - дистрибутив занимает чуть менее 3 мегабайт (правда для своей работы требует фреймворк 2.0). Но простая внешность, понятное дело, обманчива. Главное нововведение из того, что там появилось, несомненно - ожидавшийся давно Avalon, который за последнее время приобрёл свое окончательное название WPF - Windows Presentation Framework.

    Для того чтобы начать под все это программировать нужно совсем немного: Windows Vista + Visual Studio 2005 + Windows Vista SDK + Visual Studio Extensions для WFX. Неприятный момент тут один - SDK весит несколько многовато - 1,25 ГБ, при этом за компанию желательно поставить SP1 для Visual Studio (452 МБ) + обновнление VS-SP1 для Висты - это еще 30 МБ. Вот такой примерно инструментарий.

    После установки всего этого добра в списке доступных проектов появляется "NET Framework 3.0" и там "Windows Application (WPF)".

    Что могу сказать после небольшого знакомства. Конечно, к подобным нововведениям нужно привыкать. И привыкание, прежде всего, связано с достаточно сильным уходом в другую плоскость всего процесса программирования интерфейсов. Теперь имеется достаточно глубокое разделение процесса создания интерфейса как такового с его непосредственным программированием.

    Вообще в процессе программирования имеется сильное дежавю с ASP.NET. Форма теперь очень сильно напоминает веб-форму *.aspx и создается на языке разметки приложений AXML, имея соответствующее расширение. Кроме файла *.axml аналогично ASP.NET наличествуют файлы code-behind, написанные уже на managed-языке.

    Под все это дело создана достаточно не маленькая библиотека элементов управления, которая в чем-то похожа на System.Windows.Forms. ... , только без слова Forms - там есть много чего. Главная особенность этих элементов - очень, очень сильное дистанцирование от GDI, GDI+. Это ведет к тому, что теперь все элементы получили, например, независимость от разрешения. Самое же главное - в корне поменялась парадигма рисования. Если раньше в основе всего лежала по своей сути процедурная раскраска пикселов в методах типа OnPaint, то сейчас этот процесс гораздо ближе лежит к трехмерной графике, которая по сути и используется для вывода всего, в том числе и стандартных элементов управления. Естественно имеется полная поддержка аппаратного ускорения Direct 3D.

    Короче говоря, в настоящее время уже есть мощная основа для создания интерфейсов вроде Windows Media Center - красочных, анимированных, где все отражается, расплывается, просвечивает и перетекает. Естественно не все пока совсем уж гладко - например удобство работы в Visual Studio, скажем так, на троечку (хотя это наверное уже завышенные требования после феноменально удобной работы с Windows Forms во втором фреймворке). Пока что не реализовано достаточно многое - позиционирование элементов на формах не имеет никакой толковой привязки, обработчики событий в code-behind нужно добавлять вручную и т.д. и т.п. Большинство из этого планируют сделать лишь в VS 2008, который уже пошел в бетатестирование.

    В общем, в этой связи интересно, насколько высоко на этот раз взяла MIcrosoft планку? Сподвигнет ли новый фреймворк к революции в интерфейсах?
     
  2. Гость

    Гость Гость


    Не сподвигнет, не сподвигнет. Поскольку в угаре конкурентной борьбы мелкомягкие забывают об элементарном человеческом факторе. Ибо с выходом каждой новой версии их приблуд огромному количеству программистов надо переучиваться работать с этими приблудами.
    А на переобучение надо много времени, которого у нормально работающих людей на самом деле не много, простите за каламбур. Таким образом, очень часто все эти новейшие фенечки в основном осваивают не программисты, имеющие значительный опыт разработки, внедрившие по нескольку больших (на десятки тысяч строк кода) проектов, а студенты, которым до нормального уровня еще расти и расти. То есть, действительно _м_а_с_с_о_в_о_г_о_ перехода разработчиков на это все в ближайшее время не предвидится.
    К тому же у софта, написанного на старых технологиях, не будет совместимости с тем, который будет написан с помощью этих новых штучек.
    Так что высоким темпом выпуска новинок мелкомягкие сами себе портят игру. И каждому воздается по делам его. Аминь. :)
     
  3. 1777

    1777 Активный участник

    6.532
    12
    новые проекты будут на этом делатся, а старые - соответствено нет, когда был ASP.NET 1.1, потом стал ASP.NET 2.0 - постепенно стали переходить на новуюверсию, и новые проекты делать уже на новой версии, а старые - при необходимости портировать
     


  4. Полностью согласен! На своем опыте когда был студентом любил там выискивать всякие красивые тулбары и тому подобное, а при реальном производственном графике ты сосредотачиваешься на бизнес-логике и надежности, а не на "гламурности" интерфейса.

    Но все равно интересно было поковырятся!
     
  5. Caps

    Caps Активный участник

    4.342
    18
    Сподвигнет. Когда Офис 2007 станет реальностью на десктопах.
     
  6. Voyager

    Voyager Активный участник

    3.066
    0
    Я бы не акцентиролвася на WPF только, .NET это еще и WWF с LINQ (WCF в счет не беру).
    Из .Net 3.x интересуюсь пока только WWF (Workflow Foundation) и LINQ, поставил 3.5 и студию 2008 beta 2, изучаю. LINQ - мощная штука, практически SQL в .NET :)
    Если кому нужна книжка Троелсена с описанием возможностей 3.0 и примерами (на английском), стучите.
     
  7. HorstWessel

    HorstWessel Активный участник

    1.585
    0
    Так в чем эпохальность-то? в двух словах, если можно
     
  8. Voyager

    Voyager Активный участник

    3.066
    0
    Возможности, новизна.
     
  9. Alex_Matrix

    Alex_Matrix Гость

    А можно не в двух, а в 20?
     
  10. DirectX

    DirectX Активный участник

    1.873
    0

    Если касаться лишь технологии WPF, то это другой взгляд на интерфейс. Суть программирования там очень близка к созданию эдакой интерактивной презентации в PowerPoint. Легко делаются анимации и всяческие спецэффекты. Теперь гораздо проще сделать интерфейс, к примеру, для терминала экспресс-оплаты, в задачах для которых стандартные элементы управления неприемлемы по тем или иным причинам. И вообще, всякое отступление от стандартных элементов, будь то WinAMP или Windows Media Player, старыми методами обычно доставляет массу проблем.
     
  11. HorstWessel

    HorstWessel Активный участник

    1.585
    0
    То есть под интерфейсом следует понимать GUI? Такой подход, то есть визуальная разработка с использованием набора элементов управления, используется уже, по меньшей мере, лет 8-10. Что изменилось с появлением WPF?

    Имеете ввиду, что можно создать производный элемент управления? -вроде тоже не новость. В чем новизна, новые возможности и, как вы выразились, новая эра?
     
  12. Гость

    Гость Гость

    Стучу. Укажите, пожалуйста, как получить? На e-mail или взять откуда с ftp/http? Размер мне без разницы.
     
  13. Гость

    Гость Гость

    Это не та книга?
    ---
    A Preview of C# 3.0

    Andrew Troelsen, Microsoft C# MVP
    Intertech Training
    2006
    ---

    Или что-то существенее?
     
  14. Гость

    Гость Гость

  15. DirectX

    DirectX Активный участник

    1.873
    0

    Здесь не совсем о кнопочках и листбоксах разных идет речь. Скорее о том, что меняется представление об отрисовке того, что в MFC называется View. В том же MFC конпки есть и прочие стандартные элементы есть, но когда одними ими не обойтись для отображения документа и работы с ним и нужно что-то большее, то на форму помещается, грубо говоря, пустое окно вида, к нему добавляется обработчик OnPaint - и вперёд. Вот здесь, собственно и начинаются различия. И функция OnPaint, по большому счету, реализует логику рисования текущего состояния документа посредством вызовов функций. Даже если это виртуальные функции некоторых объектов, то они в конечном счете сводятся к примитивам типа MoveTo, LineTo и т.п. И если я хочу увидеть на экране прямоугольник, то пишу функцию вроде такой:
    CMyView::OnPaint(CDC* pDC)
    {
    CRect r(1, 2, 300, 40);
    pDC->FillRect(r, RGB(128,128,128));
    }

    А вот с анимациями уже сложнее. Нужно создавать таймер, делать InvalidateRect, чтобы функция OnPaint вызывалась когда надо. Да и вообще, если подходить к процессу рисования более обстоятельно, то надо уже учитывать объекты не попадающие в текущий перерисовываемый прямоугольник, бороться с мерцанием, рисуя во внеэкранной области и потом делая BitBlt, да вообще, даже примитивная функция рисования обрастает таким количеством лишнего, что просто жуть.

    В этом смысле WPF представляет совсем иную методику. Если я здесь захочу нарисовать прямоугольник, то создаю объект класса Rectangle с заданными свойствами. Все остальное возьмет на себя рендерер, который все это отобразит и когда надо перерисует. В процессе изменения документа достаточно лишь вовремя менять свойства. Зачатки такого подхода есть и в Delphi, где уже давно были визуальные классы типа Shape. Только там все несколько примитивно, а здесь уже можно рисовать и анимировать свойства уже чего угодно, начиная от кнопок, заканчивая видеоокнами, которые могут крутиться, вертеться, отбрасывать тени, отражаться, размываться, иметь динамическую карту прозрачности и много чего еще.
     
    Последнее редактирование: 08.08.07
  16. Дядя Федор

    Дядя Федор Участник

    3.851
    0
    И какая будет рекомендованная конфигурация машины, чтобы все это не тормозило? Сразу двухядерный камень и 2 гига оперативки?
     
  17. Voyager

    Voyager Активный участник

    3.066
    0
  18. HorstWessel

    HorstWessel Активный участник

    1.585
    0
    Эта техника восходит своими корнями к ООП и ей уже тоже скоро будет 10 лет. Неужели в Net только сейчас это начали использовать?

    Теперь я кажется начинаю понимать. К вашим графическим объектам добавились трансформации и предопределенные спецэфекты? Тогда может стоит посмотреть по сторонам - а не прошлый-ли это век вместо "новой эры"? Кстати, как там на счет трехмерных элементов?
     
  19. AlTk

    AlTk Читатель

    10.699
    0
    HorstWessel,
    " ... Эта техника восходит своими корнями к ООП и ей уже тоже скоро будет 10 лет. Неужели в Net только сейчас это начали использовать? ..."
    к сожалению, это так. Wimdows не была объектной операционной системой.
    HorstWessel, а где еще это уже реализовано, кроме OS/2?
     
  20. HorstWessel

    HorstWessel Активный участник

    1.585
    0
    AlTk,
    Операционка может быть и не объектной. Даже не уверен что OS/2 поддерживает ООП на уровне ОС, хотя точно не знаю. Тем не менее уже давно существует инструментарий, который представляет ОС разработчику в "объектном" виде - тот же пакет swing умеет это делать давно, причем вне зависимости от ОС. Поэтому и странно, что Net до сих не позволял использовать это для своей же родной ОС.
     
  21. Caps

    Caps Активный участник

    4.342
    18
    AlTk,
    HorstWessel,
    Скажите тупому, что есть "объектной" в данном контексте? Потому как LDAP, например - штука объектнее некуда. Или вы про ядро? Ну так а покажите мне где в современных ОС оно объектное.... Библиотеки - да, бывают, а ядро - не видел.. Да и нехрен там объектам делать...
     
  22. AlTk

    AlTk Читатель

    10.699
    0
    вот в это контексте, как раз, LDAP совсем даже необъектнее. В полуоси была такая вещь, как SOM (System Object Model - модель системных объектов) и она позволяла выполнять динамическое наследование объектов на этапе выполнения приложения в полном смысле этого слова. при этом можно даже было динамически изменять объекты-родители без перекомпиляции приложений. в библиотеках языка С++ для Windows это просто невозможно сделать.
    MS для этого придумала СОМ и из-за невозможноти этого сделать разделила наследование интерфейса и наследование реализации и сделала всякие вкладывающиеся СОМ объекты.

    добавлено через 1 минуту
    HorstWessel, если операционка необъектная, то как пакет может превратитьее в настоящую объектную. сомневаюсь, что swing сможет то, о чем я написал про полуось
     
  23. HorstWessel

    HorstWessel Активный участник

    1.585
    0
    Никак. ОС какой была так и останется. Разработчик может видеть ее как объектную в той части, для которой пакет создан. Или, другими словами, swing позволяет создавать GUI манипулируя объктами в классическом смысле. Как этот пакет использует API ОС известно только "реализации" этого пакета.
    Да это никто и не стремиться сделать. Даже можно сказать,что вместо создания чисто объектных ОС индустрия идет по пути создания объектного мидлваре. Тот же RHAT не меняет ядро линукса, но продвигает JEMS.
     
  24. AlTk

    AlTk Читатель

    10.699
    0
    HorstWessel, Вы опять говорите про другое. вы говорите про представление. всего лишь.
    то, что сделано в Swing-е уже давно было реализовано в Borland OWL и Visual MFC - это, если мне не изменят память где-то 92 год.

    я говорю о настоящей объектности и, в частности, о динамическом наследовании.

    добавлено через 6 минут
    "... Да это никто и не стремиться сделать. ...
    неправда Ваша. посмотрите, например, Oberon 3.

    добавлено через 9 минут
    DirectX просто привел неудачный пример. он понятен только тем, кто программирует под Windows.
     
  25. HorstWessel

    HorstWessel Активный участник

    1.585
    0
    AlTk,
    О том и речь, что не понятно в чем же состоит новизна. swing всего лишь пример того что это давно существует, причем не зависимо от ОС.

    А на счет объектных ОС, то ценность в этом конечно есть... для разработчика разумеется. Весь вопрос до какого уровня и как это реализовать - на уровне ОС или как мидлваре. какой вариант выживет покажет время. средний слой на сегодня уже достаточно стандартизирован и хорошо зарекомендовал себя. его широко используют уже сегодня. я думаю этот подход рациональней.
     
  26. The Last Winged

    The Last Winged Активный участник

    11.862
    48
    Не прошло и полтора десятка лет, как M$ придумали аналог libglade
     
  27. AlTk

    AlTk Читатель

    10.699
    0
    HorstWessel, новизна именно в настоящей объектности. в _динамической_.
    swing дает всего лишь статическую объектность. повторю еще раз: то что реализовано в swing-е MS уже сделало 15 лет назад, тогда и свинга никакого и не было. зачем ей тоже самое делать опять.

    "А на счет объектных ОС, то ценность в этом конечно есть... для разработчика разумеется."
    а для кого должна быть ценность? если разработчику удобнее, то и пользователю удобнее.

    The Last Winged, доброе утро!
     
  28. HorstWessel

    HorstWessel Активный участник

    1.585
    0
    AlTk,
    Я не понимаю что есть динамеская и статическая объектность? Если это и есть нововедение то поясните в чем разница между старым и новым?

    В догонку еще вопрос: эти новшества майкрософт встраевает на уровне ОС или создает к ОС мидваре?
     
  29. AlTk

    AlTk Читатель

    10.699
    0
    HorstWessel, да особой новизны-то нет, если вспомнить Smalltalk или Objective C.
    в С++ изменение класса невозможно без перекомпиляции всего кода, где есть клиенты этого класса и где есть наследники этого класса.
    в СОМ от MS перекомпилировать не нужно, но это не ООП, так как отделены наследование интерфейса и наследование реализации.

    а поводу того, куда MS это встраивает, так я не знаю, скорее всего это все-таки некая прослойка.
     
  30. HorstWessel

    HorstWessel Активный участник

    1.585
    0
    AlTk,
    Опять не понял. Интерфейс в ООП является строго формализованным элементом объектно-ориентированного языка и, в качестве семантической конструкции, используется программным кодом. В C++ роль интерфейсов играют абстрактные классы. Как и что сделано в COM я не знаю. Может это действительно ни как не связано с ООП.

    Или Вы сейчас хотели сказать о позднем связывании и динамической загрузке классов?

    Кстати в свинге для разработчика как раз определены интрефейсы, а реализация выполнена под каждую ОС. Причем классы подгружаются и компилируются динамически. Но это свойство JVM.