Загрузка...
скачать
Реферат на тему:

Обращение контроля



План:

    Введение
  • 1 Техническое описание
    • 1.1 Термины и определения
    • 1.2 Разрыв зависимости
  • 2 Применение Inversion of Control
    • 2.1 C++
    • 2.2 Java
    • 2.3 .NET
    • 2.4 PHP4
    • 2.5 PHP5
    • 2.6 Python
    • 2.7 RUBY
    • 2.8 ActionScript
    • 2.9 Groovy на Grails

Введение

Инверсия управления (Inversion of Control, IoC) — важный принцип объектно-ориентированного программирования, используемый для уменьшения связанности в компьютерных программах и входящий в пятерку важнейших принципов SOLID.

Наиболее популярной реализацией IoC является Dependency Injection Principle (Принцип внедрения зависимостей). Dependency Injection используется во многих framework'ах, они называются IoC контейнеры. Он применяется программистами, использующими такие объектно-ориентированные языки программирования, как Smalltalk, C++, Java или языки платформы .NET.


1. Техническое описание

1.1. Термины и определения

Модули верхних уровней не должны зависеть от модулей нижних уровней. Оба типа модулей должны зависеть от абстракций. Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.

Класс X зависит от класса Y, если выполняется одно из следующих условий:

  • X has-a Y и вызывает его
  • X is-a Y
  • X зависит от некоторого класса Z, который зависит от Y (принцип транзитивности)

X зависит от Y не значит, что Y зависит от X. Если же существуют обе зависимости, то это называется циклической зависимостью: X не может быть использован без Y, и наоборот. Существование большого числа циклических зависимостей в объектно-ориентированной программе может быть показателем неоптимального программного построения.


1.2. Разрыв зависимости

Если объект x (класса X) вызывает методы объекта y (класса Y), то X зависит от Y. Зависимость может быть обращена введением третьего класса, а именно интерфейсного класса I, который должен содержать все методы, которые x может вызвать у объекта y. Кроме того, Y должен реализовать интерфейс I. X и Y сейчас оба зависят от I, и класс X более не зависит от класса Y; предполагается, что X не реализует I.

Это исключение зависимости класса X от Y введением интерфейса I называется Inversion of Control (или Dependency Injection (DI)).

Следует отметить, что Y может зависеть от других классов. До внесения изменений X зависел от Y, таким образом X косвенно зависел от всех классов, от которых зависит Y. Применением Inversion of Сontrol все эти косвенные зависимости также были разорваны — не только зависимость X от Y. Новый интерфейс I ни от чего не зависит.


2. Применение Inversion of Control

2.1. C++

  • PocoCapsule

2.2. Java

Программисты, использующие Java, применяют Inversion of Control в Inversion of Control контейнерах. Программное обеспечение запрашивает объект из контейнера, и контейнер создаёт объект и его зависимости. Сервер приложений ATG Dynamo был одной из первых вычислительных сред, эффективно использовавших этот подход. Современными примерами таких контейнеров служат: HiveMind, PicoContainer, Spring Framework (отметим, что Spring — полноценная корпоративная платформа, а не только IoC-контейнер), Apache Excalibur, Seasar, и DPML Metro.


2.3. .NET

  • Unity Application Block 2.0
  • Spring.NET
  • Structuremap
  • CastleProject
  • Seasar
  • Winter.NET
  • Ninject

2.4. PHP4

  • drip

2.5. PHP5

  • Garden
  • Symfony Dependency Injection

2.6. Python

  • zope.interface и zope.component

2.7. RUBY

  • copland
  • needle

2.8. ActionScript

  • Mate
  • MIoC
  • Robotlegs
  • Swiz
  • Dawn

2.9. Groovy на Grails

Groovy на Grails использует Spring Framework для запуска приложений.

  • Spring Framework


скачать

Данный реферат составлен на основе статьи из русской Википедии. Синхронизация выполнена 20.07.11 16:06:40

Похожие рефераты: Dependency Injection, Dependency Walker, Inversion (игра), The Principle of Moments, The Principle Of Doubt, The Principle of Evil Made Flesh.

Категории: Шаблоны проектирования, Объектно-ориентированное программирование, Парадигмы программирования.

Текст доступен по лицензии Creative Commons Attribution-ShareAlike.