Letysite.ru

IT Новости с интернет пространства
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Компонентный подход в программировании

Компонентное программирование в .NET

Пожалуй, наиболее существенным нововведением идеологии Microsoft . NET является компонентно-ориентированный подход к программированию.

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

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

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

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

Получив представление о компонентах и их отличиях от традиционных объектов ООП , рассмотрим существующие подходы к моделированию вариаций компонентного подхода в современной практике проектирования и реализации программных комплексов и систем.

Прежде всего, поскольку основной вычислительной средой для исследования в данном курсе является Microsoft . NET , обсудим особенности модели для компонентно-ориентированной разработки программного обеспечения, предложенной корпорацией Microsoft. Эта модель называется компонентной объектной моделью (или Component Object Model , COM ) и является изначальным стандартом, принятым для компонентной разработки приложений в корпорации Microsoft.

Компонентная модель COM определяет протокол для конкретизации (т.е. создания экземпляров) и использования компонент (по аналогии с классами и объектами ) как внутри одного и того же процесса, так и между различными процессами или компьютерами, предназначенными для выполнения того или иного программного проекта, основанного на компонентной технологии . Модель COM является достаточно универсальной и используется в качестве фундамента для таких технологий проектирования и реализации программного обеспечения, как ActiveX, OLE и целого ряда других технологий. Приложения для COM -модели могут создаваться средствами таких языков и сред разработки как Visual Basic , C ++, . NET и т.д.

Другим известным стандартом для компонентной модели является стандарт компании Sun Microsystems, известный как JavaBeans , который не обладает свойством независимости от языка программирования. Еще один широко используемый стандарт компонентного программирования — архитектура объектных запросов CORBA (несмотря на поддержку многоязычной разработки приложений, существуют сложности, связанные с отображением одного языка реализации в другой; для этой цели применяется достаточно громоздкий интерфейс , основанный на специальном языке описания IDL ).

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

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

Заметим, что промежуточный язык IL всегда компилируется в естественный ( native ) код до выполнения программы.

Для более эффективного манипулирования системой типизации компонент создаваемого программного обеспечения в рамках модели COM , концепция . NET предусматривает механизм пространств имен ( namespace ).

Пространством имен будем называть механизм среды Microsoft . NET , предназначенный для идентификации типов объектов языков программирования и среды реализации.

Описания пространств имен по аналогии с описаниями типов данных размещаются в файлах. Перечислим основные свойства, которыми характеризуются пространства имен в среде Microsoft . NET . Прежде всего, пространства имен могут как объединять различные сборки , так и быть вложенными друг в друга. Кроме того, файлы с описаниями могут содержать множественные пространства имен. Важно отметить, что между пространствами имен и файлами не существует однозначного соответствия. Наконец, полное имя типа должно содержать все необходимые пространства имен.

Приведем пример файла xxx.cs с описанием множественных пространств имен на языке C #:

Приведем пример файла xxx.cs с описанием пространств имен на языке C # с неоднозначным (с учетом предыдущего примера) соответствием файлов и пространств имен:

Кроме свойств, перечисленных выше, механизм пространств имен в среде вычислений . NET обладает еще целым рядом важных особенностей.

Так, допускается импорт пространств имен с использованием зарезервированного слова using языка программирования C # (похожий подход реализован в модулях языка Modula -2). Проиллюстрируем эту особенность фрагментом программы на языке C #:

Кроме того, существует возможность импорта одних пространств имен в другие. Проиллюстрируем это свойство фрагментом программы на языке C #:

Отметим также, что для явного указания полных и сокращенных имен разрешаются псевдонимы (alias) . Проиллюстрируем это свойство следующим примером программы на языке C #:

Что такое Компонентно-ориентированное программирование(COP)

COP vs OOP.

Компонентно-ориентированное программирование — новое объектно-ориентированное программирование.

Читать еще:  Среда программирования изучение

C развитием все новых front-end фреймворков — таких как React, Angular и Vue — появляются также и новые парадигмы. Одной из таких является компонентно-ориентированная парадигма. Её основная идея — это складывание воедино компонентов, чем-то похожих на кусочки Lego.

В основе COP лежит правило DRY — Don’t Repeat Yourself (с англ. — не повторяйся). Повторения в коде малоэффективны и затратны по времени. Чем меньше повторений, тем быстрее идет разработка приложения. Учитывая дедлайны, которые зачастую ставят заказчики, скорость разработчики является чуть ли не одной из главных метрик.

Как выглядит Компонентно-ориентированное программирование(COP)?

Если вы знаете какой-либо front-end фреймворк, например React, Angular или Vue, то вам должно быть знакомо, как выглядит компонентно-ориентированная архитектура. Вот небольшой пример компонента Header

В данном блоке кода мы импортируем компоненты, создаем композицию и складываем их как кирпичики.

Проблемы, которые решает компонентно-ориентированная парадигма.

COP — это очень мощная концепция, ибо она позволяет нам изолировать и инкапсулировать логику. Чем меньше наши файлы — тем более они поддерживаемы. Компании Facebook пришлось исправлять всем известную ошибку уведомлений. Где-то в 2014–15 гг. на персональной страничке пользователя показывало, что у него есть новые сообщения. Когда же пользователь нажимал на красный колокол(указания о новых сообщениях), никаких новых сообщений у пользователя не было. Это вызывало негодования пользователей по всему интернету. Причиной этого бага были огромные файлы с трудночитаемым и запутанным PHP кодом. Проблема была не в языке программирования, а в структуризации.

React был изобретен компанией Facebook именно для решения бага уведомлений. Релиз фреймворка React ознаменовал начало новой эры — эры компонентно-ориентированной парадигмы.
Мой прогноз — будущее за нативными веб-компонентами. На данный момент каждая инфраструктура имеет свою собственную экосистему инструментов, компонентов, библиотек и т. д. Хотя удобно использовать оупенсорсный код, нехорошо то, что каждая экосистема является замкнутой. Если вы используете React, то вы должны ограничиваться только React. Вы не можете использовать инструменты Angular, Vue или Svelte. Нативные Веб Компоненты изменят все это.
Подумайте только, как здорово, если бы мы могли использовать инструментарий различных библиотек одновременно.
Допустим кто-то написал потрясающую библиотеку анимации, которая совместима со всеми фреймворками. Это именно то, к чему стремится API-интерфейс веб-компонентов. Если вы хотите узнать больше про API веб-компонентов — вот ссылка на статью.

API Веб-Компонентов

API, совместимый со всеми JavaScript библиотеками и фреймворками, — это круто. Пишешь код один раз, а используешь много. Вот так выглядит обычная кнопка с использованием веб-компонентов:

Веб-компонент представляет собой простой фрагмент кода на основе классов с наследованием. Обратите внимание, как мы расширяем нашу кнопку для наследования класса HTMLElement.

Если вам интересно узнать больше о веб-компонентах, обратитесь к документации Mozilla. У Mozilla очень хорошо структурированная и понятная документация.

В следующий раз, когда вам нужно будет решить какую-то проблему, постарайтесь использовать компонентно-ориентированный подход. Этот подход действительно хорош, особенно в тех случаях, когда перед вами стоит большая задача. Разделяй и властвуй!

Браузерная поддержка API веб-компонентов

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

Язык C# и компонентно-ориентированное программирование

Решение проблемы переносимости программного кода было адаптировано фирмой Microsoft для языка C#. Однако в связи с развитием Internet помимо переносимости программного кода, оставалась ещё одна нерешённая проблема – межъязыковая возможность взаимодействия программных и аппаратных изделий разных поставщиков, или многоязыковое программирование.Как программы, созданные на разных языках программирования, должны взаимодействовать одна с другой? Такое взаимодействие необходимо для:

· создания больших систем с распределённым ПО;

· программирования программных компонентов, которые можно использовать (в двоичном виде) в различных приложениях и в разных ОС.

В Java не достигнута полная интеграция с OС Windows. Так как Windows довольно популярна, то отсутствие её прямой поддержки – серьёзный недостаток языка Java. В связи с этим фирма Microsoft в конце 90-х годов XX века начала разработку языка C# (# – музыкальный знак, полутон, то есть полушаг вперёд), который объединил лучшие свойства языков C, C++ и Java.

В связи с развитием Internet фирма Microsoft начала разработку новой платформы .NET, встроенным языком которой является язык C#.

Первая версия языка C# вышла в середине 2000 года, его главный архитектор – Андерс Хейлсберг, один из ведущих специалистов в области языков программирования (в 1980 году – автор языка Turbo Pascal и Delphi).

C# непосредственно связан с C, C++ и Java. Эти три языка – самые популярные. Более того, программистам, знающим базовые языки C, C++, переход на C# не составляет труда.

Генеалогические дерево C#

«Дедушкой» C# является язык C. От C язык C# унаследовал: синтаксис, многие ключевые слова и операторы. В отличие от C++ C# построен на улучшенной объектной модели. C# полностью объектно-ориентированный язык, то есть C#- программы состоят только из классов.

C# и Java связаны между собой немного сложнее, на более идейном уровне: заимствована идея переносимости программного кода. Подобно Java, C# не потомок Java, а скорее его брат. Самые важные средства C# связаны со встроенной поддержкой программных компонентов. В связи с этим, язык C# называют компонентно-ориентированным языком программирования. Самым важным качеством компонентно-ориентированного языка является его способность работать в среде многоязыкового программирования.

Читать еще:  Онлайн калькулятор нелинейное программирование

Объектно-ориентированные среды программирования

Инструментальным средством разработки современных Windows-приложений, Web-служб, Internet-приложений и приложений других видов является объектно-ориентированная среда программирования Microsoft Visual Studio хххх.NET х.х. Это средство представляет собой интегрированную среду разработки, которая едина для языков программирования Microsoft: Visual C#, Visual C++, Visual Basic, J#.

Единицей любого приложения является проект. Типы проектов могут быть следующими:

¾ Windows Application – оконное приложение Windows;

¾ Console Application — консольное приложение (без диалогового окна);

¾ Control Library – создание новых элементов управления;

¾ WebForm Application – создание динамических Web-страниц;

Проекты могут собираться в сборки.

2-4.Философия и технология .NET. Компоненты платформы .NET.

Компоненты платформы .NET

Платформа (технология, модель) .NET –это совершенно новая модель для создания приложений под Windows, для разработки Web-служб и Web-приложений. Ее основные возможности:

· платформа .NET является полностью независимой от используемых языков программирования. Можно использовать несколько .NET-совместимых языков программирования даже в рамках одного проекта. Один из главных принципов .NET платформы звучит так: «Изменяйте все, что хотите, откуда вам угодно»;

· полное взаимодействие с существующим программным кодом. Для этого создаются двоичные файлы .NET (.dll, .exe);

· общая среда выполнения для любых приложений .NET, вне зависимости от того, на каких языках они созданы;

· использование библиотек базовых классов скрывает сложности вызовов функций Win32API.

Компоненты платформы .NET – это:

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

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰).

Папиллярные узоры пальцев рук — маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни.

Компонентный (блочный) подход

В предыдущей статье мы с Вами обсуждали отличный подход MVC. Отличный не с точки зрения практики применения, сколько с точки зрения самой концепции. И более развитым решением, которое уже очень часто применяется на практике, является компонентный (блочный) подход.

В компонентом подходе остаются всё те же 3 элемента: Model, View и Controller. Но очень важное отличие: в чистом MVC пользователь обращался к Controller, однако, гораздо логичнее обращаться к View. И как раз в компонентом подходе идёт обращение именно к указанному элементу.

Второй важнейшее отличие состоит в том, что Controller разбивается на несколько частей, компонентов, каждый из которых отвечает за свою часть. Например, блок с новостями, панель пользователя, блок с комментариями и так далее. Разумеется, вся обработка идёт в соответствующем блоке. Например, если нужно обработать добавление нового комментария, то эта обработка помещается в компонент, отвечающий за комментарии. А не всё в одну кучу, как это было в MVC (когда вся обработка отправлялась в 1 файл, controller.php).

Давайте с Вами разберём компонентный подход на примере из прошлой статьи. Начнём с файла index.php, принадлежащий Шаблону.

Комментарии

Теперь рассмотрим файл comments.php, отвечающий за комментарии:

Может показаться, что ничего не изменилось. Ведь остался тот же PHP-код в файлах Шаблона. Однако, нам удалось сделать так, чтобы дизайнер и только дизайнер решал, какие блоки и где выводить. Это очень значимый результат. Теперь дизайнер может в своём Шаблоне, взять весь этот код подключения комментариев и переставить в другое место или, например, вообще удалить. В то же время, если программист придумает какой-то более быстрый способ получения комментариев, он спокойно исправит Model, никак не изменяя View.

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

  • По-прежнему, остался PHP-код в Шаблоне.
  • Для больших сайтов данный способ не подойдёт. Ведь у сайта есть множество повторяющихся элементов, например, шапка сайта (не просто одна картинка, а некоторая структура HTML-кода). И если потребуется изменить её, то потребуется менять все страницы вручную. А если их будет 1000?

В связи с этими минусами, были придуманы Шаблонизаторы, которые лишены этих двух минусов. Их существует большое количество, например, Smarty, но я Вам рекомендую создать свой. В любом случае, у каждого Шаблонизатора будут свои минусы. Например, наличие служебных конструкций в Шаблоне (именно служебных конструкций, а не PHP-кода), которые являются тем же кодом, просто в виде HTML-комментариев, который в Шаблонизаторе преобразуется в PHP-код. Либо если вынести всю обработку в Шаблонизатор, оставив идеально чистый Шаблон с только HTML-кодом без всяких служебных конструкций, то тогда придётся смириться с некоторой зависимостью программной части и внешнего вида. Это означает, если принципиально изменить вывод чего-либо (например, был выпадающий список, а теперь нужно вывести всё в теге ), то придётся изменять программную часть.

Но в любом случае, именно Шаблонизатор Вы и должны использовать для создания крупных проектов. Можете использовать уже готовый, прочитать документацию и использовать, а можете написать свой собственный, как это сделал я. Безусловно, он также не лишён недостатков. Но, кто знает, быть может именно Вы создадите идеальный Шаблонизатор, тем самым, мгновенно прославившись в кругу программистов.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Читать еще:  Интерфейс прикладного программирования

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

Она выглядит вот так:

  • BB-код ссылки для форумов (например, можете поставить её в подписи):
  • Комментарии ( 14 ):

    Михаил, а почему если писать в статическом стиле то конструктор не работает и выдаёт ошибку?

    Что за ошибка и что за конструктор?

    И опять мне не пришло письмо об ответе на комментарий. Вообщем если я пишу в конструкторе строчку self::$db = new mysqli(«localhost», «Admin», «udiram04», «hosting»); то выдаёт ошибку что метод self::$db->query не найден

    А на конструктор не ругается?

    Нет, может мне бросить пока статические методы и попробовать всё таки $this?

    А какая именно ошибка на query() возникает? Прямо текст скопируйте.

    Fatal error: Zip:__construct($db), none object error:__construct($db); Странная ошибка которую я никогда не видел, возможно и вы тоже её никогда не видели

    Впервые вижу такую ошибку, Вы, видимо, какой-то чужой класс используете, и вот из него уже и идут эти ошибки. По крайней мере, self::$db — это правильно, и self::$db->query() тоже прекрасно должен работать.

    Я использую ваш класс из курса, мне друг скопировал его на флешку, я просил у него дать полностью курс но он отказался, сказал сам покупай. Я бы с удовольствием купил но денег даже на новый год нету. вообщем попроюуй сам разобраться с этим классом. И всё таки советую выложить класс для бд для всех, и использование каждого метода, будет очень удобно для всех, вы согласны со мной?

    Добрый день! У меня возникла вот какая проблема при использовании данного метода слетает CSS (допустим не могу прижать заголовки к верхней границе поля таблицы, или при вставке картинок(кнопок) тоже получается разрыв), а если использовать без блоков то все работает корректно

    Этап 3. Объектный подход к программированию

    (с середины 1980-х гг. до нашего времени)

    Объектно-ориентированное программирование определяется как технология создания сложного программного обеспечения, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определенного класса (рис. 1.6), а классы образуют иерархию с наследованием свойств. Взаимодействие программных объектов в такой системе осуществляется путем передачи сообщений (рис. 1.7).

    Объектная структура программы впервые была использована в языке имитационного моделирования сложных систем Simula, появившемся еще в 60-х гг. XX в. Естественный для языков моделирования способ представления программы получил развитие в другом специализированном языке моделирования – языке Smalltalk (70-е гг. XX в.), а затем был использован в новых версиях универсальных языков программирования, таких как Pascal, C++, Modula, Java.

    Рис. 1.6. Структура объектно-ориентированной программы в виде связанных классов

    Рис. 1.7. Взаимодействие объектов в объектно-ориентированных программах

    Основным достоинством объектно-ориентированного программирования по сравнению с модульным программированием является «более естественная» декомпозиция программного обеспечения, которая существенно облегчает его разработку. Это приводит к более полной локализации данных и интегрированию их с подпрограммами обработки, что позволяет вести практически независимую разработку отдельных частей (объектов) программы. Кроме этого, объектный подход предлагает новые способы организации программ, основанные на механизмах наследования, полиморфизма, композиции, наполнения. Эти механизмы позволяют конструировать сложные объекты из сравнительно простых. В результате существенно увеличивается показатель повторного использования кодов и появляется возможность создания библиотек классов для различных применений.

    Бурное развитие технологий программирования, основанных на объектном подходе, позволило решить многие проблемы. Так, были созданы среды, поддерживающие визуальное программирование, например, Delphi, C++ Builder, Visual C++ и т. д. При использовании визуальной среды у программиста появляется возможность проектировать некоторую часть, например, интерфейсы будущего продукта, с применением визуальных средств добавления и настройки специальных библиотечных компонентов. Результатом визуального проектирования является заготовка будущей программы, в которую уже внесены соответствующие коды.

    Использование объектного подхода имеет много преимуществ, однако его конкретная реализация в объектно-ориентированных языках программирования, таких как Pascal и C++, имеет существенные недостатки:

    фактически отсутствуют стандарты компоновки двоичных результатов компиляции объектов в единое целое даже в пределах одного языка программирования: компоновка объектов, полученных разными компиляторами C++ в лучшем случае проблематична, что приводит к необходимости разработки программного обеспечения с использованием средств и возможностей одного языка программирования высокого уровня и одного компилятора, а значит, требует наличия исходных кодов используемых библиотек классов; изменение реализации одного из программных объектов, как минимум, связано с перекомпиляцией соответствующего модуля и перекомпоновкой всего программного обеспечения, использующего данный объект.

    Таким образом, при использовании этих языков программирования сохраняется зависимость модулей программного обеспечения от адресов экспортируемых полей и методов, а также структур и форматов данных. Эта зависимость объективна, так как модули должны взаимодействовать между собой, обращаясь к ресурсам друг друга. Связи модулей нельзя разорвать, но можно попробовать стандартизировать их взаимодействие, на чем и основан компонентный подход к программированию.

    Ссылка на основную публикацию
    Adblock
    detector