Инструменты пользователя

Инструменты сайта


bb:nohost

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
bb:nohost [2016/04/03 12:12]
prospero78 [Системный слой]
bb:nohost [2020/10/29 07:08] (текущий)
Строка 1: Строка 1:
-![Схема](https://dl.dropboxusercontent.com/u/9533224/bb/bb-host.svg) +~~ODT~~ 
-Рис.1. Переход от оста" к "платформе"+# Проблема герметичности #
  
 +Блэкбокс с точки зрения пользователя является обычным приложением. То есть, для работы ему необходима **операционная система**. 
  
-# Проблема герметичности #+Блэкбокс с точки зрения программной архитектуры является компонентным каркасом, то есть средой для запуска и управления **компонентами** и их работой.
  
-^      Блэкбокс       ^^ 
-|  с точки зрения пользователя  |  с точки зрения программной архитектуры  | 
-|Является обычным приложением. То есть, для работы ему необходима **операционная система**. |Является //компонентным каркасом//(микро-операционной системой), то есть средой для запуска и управления **компонентами** и их работой.| 
-  
-==== Понятие компонента ==== 
-**Компонент** с точки зрения каркаса является совокупностью скомпилированных модулей. Модули могут использовать возможности других модулей, таким образом появляется **зависимость** (обозначена стрелкой по направлению от зависимого модуля к необходимому). FIXME ( А картинка где? ) 
  
-Компоненты можно разделить на две группы:+{{ :bb:bb-host.svg?800 |Схема}}
  
-^  Компоненты  ^^ +Рис.1. Переход от оста" к "платформе"
-|  Зависящие от операционной системы  |  Не зависящие от операционной системы  |+
  
-Также компоненты делятся по необходимостидля работы каркаса:+Компонент с точки зрения каркаса является совокупностью скомпилированных модулей. Модули могут использовать возможности других модулей, таким образом появляется **зависимость** (обозначена стрелкой по направлению от зависимого модуля к необходимому). 
  
-^  Компоненты по нужности каркасу  ^^ +Среди всех компонентов можно выделить такие, которые не зависят от операционной системы и такие, которые зависят от неё.
-|   Нужны  |   Не нужны  | +
-|  системный слой  |  прикладной слой  |+
  
-Из представленной вертикальной и горизонтальной структуры можно уже сделать промежуточные выводы: зависящие от операционной системы компоненты //системного слоя// составляют некий //промежуточный слой//, позволяющий каркасу как бы //независимым// от нижележащей операционной системы. Если //прикладные компоненты// зависят только от "прокладки", то появляется возможность заменить "прокладку", перенеся тем самым //каркас// на другую операционную систему //без повреждений// прикладного слоя.+В отдельную группу можно выделить компоненты, необходимые для работы каркаса - системный слой. Остальные компоненты не являются необходимыми, и могут быть выделены в прикладной слой.
  
 +Зависящие от операционной системы компоненты системного слоя составляют некий "прокладочный" слой, позволяющий каркасу как бы "плавать" на нижележащей операционной системе. Если прикладные компоненты зависят только от "прокладки", то появляется возможность заменить "прокладку", перенеся тем самым каркас на другую операционную систему без повреждений прикладного слоя.
  
-==== Системный слой ==== +Рассмотрим устройство системного слоя в [эталоне](http://oberoncore.ru/blackbox/oberoncore_official_position) BlackBox. 
-Рассмотрим устройство системного слоя в [эталоне](http://oberoncore.ru/blackbox/oberoncore_official_position) **BlackBox**+Основой системы является модуль *Kernel*, который реализует поддержку времени выполнения для приложений BlackBox (см. [документацию](http://oberoncore.ru/library/ermakov_vnutrennij_interfejs_kernel) *Kernel*).
-Основой системы является модуль *Kernel*, который реализует поддержку //этапа выполнения// для приложений **BlackBox** (см. [документацию](http://oberoncore.ru/library/ermakov_vnutrennij_interfejs_kernel) *Kernel*).+
 Модуль *Kernel* использует возможности операционной системы (на рисунке эта зависимость обозначена красной стрелкой). Модуль *Kernel* использует возможности операционной системы (на рисунке эта зависимость обозначена красной стрелкой).
-Для работы клиентских (прикладных) модулей необходимы базовые //абстракции// файловой системы, оконной системы, отображений, контейнеров, диалогов и т. п. В эталоне эти //абстракции// собраны в подсистеме *System* (см. рис.), часть реализаций которых платформо-независима, а часть платформо-зависима. Платформо-независимые реализации *System* содержатся в подсистеме *Std*. В то же время, в подсистеме *Std* есть такие абстракции, которым тоже необходима платформо-зависимая реализация (например, элементы управления и диалоговые окна). Платформо-зависимые реализации *System* и *Std* содержатся в подсистеме *Host*.+Для работы клиентских (прикладных) модулей необходимы базовые абстракции файловой системы, оконной системы, отображений, контейнеров, диалогов и т.п. В эталоне эти абстракции собраны в подсистеме *System* (см. рис.), часть реализаций которых платформо-независима, а часть платформо-зависима. Платформо-независимые реализации *System* содержатся в подсистеме *Std*. В то же время, в подсистеме *Std* есть такие абстракции, которым тоже необходима платформо-зависимая реализация (например, элементы управления и диалоговые окна). Платформо-зависимые реализации *System* и *Std* содержатся в подсистеме *Host*.
  
-Разделение *System* на абстрактный интерфейс и платформо-зависимую реализацию позволяет добиться //герметичности// платформо-независимой части //системного слоя//. Герметичность позволяет заменять платформо-зависимые системные модули без модификации клиентских модулей.+Разделение *System* на абстрактный интерфейс и платформо-зависимую реализацию позволяет добиться **герметичности** платформо-независимой части системного слоя. Герметичность позволяет заменять платформо-зависимые системные модули без модификации клиентских модулей.
  
-//Герметичность// здесь понимается как отсутствие [[http://www.joelonsoftware.com/articles/LeakyAbstractions.html|протечек абстракций]] системного и прикладного слоя.+Герметичность здесь понимается как отсуствие [[http://www.joelonsoftware.com/articles/LeakyAbstractions.html|протечек абстракций]] системного и прикладного слоя.
  
-В идеале, абстракции системного слоя должны удовлетворять всем потребностям прикладного слоя. Но, по историческим причинам, в эталонной сборке **BlackBox** системные абстракции не идеальны и поэтому имеются **нарушения герметичности** системного слоя (также обозначенные на рисунке красными стрелками), что приводит к прямой или косвенной (строковые константы и т.д.) зависимости прикладных модулей от операционной системы. +В идеале, абстракции системного слоя должны удовлетворять всем потребностям прикладного слоя. Но, по историческим причинам, в эталонной сборке BlackBox системные абстракции не идеальны и поэтому имеются **нарушения герметичности** системного слоя (также обозначенные на рисунке красными стрелками), что приводит к прямой или косвенной (строковые константы и т.д.) зависимости прикладных модулей от операционной системы. 
  
 # Решение проблемы нарушения герметичности # # Решение проблемы нарушения герметичности #
bb/nohost.1459674771.txt.gz · Последнее изменение: 2020/10/29 07:08 (внешнее изменение)