В чем разница между связями "Обобщение", "Реализация" и "Имплементация" на диаграмме классов UML?
=================================================================================================================================

 Не могу понять, как проходит (и есть ли она) тонкая грань между следующими типами связей на диаграмме классов UML:   
* generaliztion (обобщение)
* realization (реализация)
* implementation (имплементация)

  
  
  

Спецификацию UML касательно этого вопроса я понимаю следующим образом:  
  

 — связь generalization возникает между классами, когда один класс (наследник) основывается на другом классе (родителе). Судя по всему, здесь родительский класс обязательно должен быть конкретным классом (т.е. можно создавать его экземпляры).  
  

 — связь realization возникает между элементами диаграммы классов, когда один класс реализует поведение, определяемое другим классом. Скорее всего здесь речь идет о реализации поведения, определяемого интерфейсом или абстрактным классом.  
  

 — связь implementation — это подтип связи realization. Судя по всему, на одном конце связи — конкретный класс, а на другом — интерфейс (interface в Java, чисто виртуальный класс в C++).  
  
**Вопрос первый:** насколько верна моя трактовка спецификации?  
**Вопрос второй:** можно ли считать realization подтипом связи generalization?  
**Вопрос третий:** если язык поддерживает множественное наследование (C++ например) и класс наследуется от двух конкретных классов — какая в таком случае связь между наследником и суперклассами?  
  
  

Семантическую разницу между интерфейсом и абстрактным классом я понимаю. Родительский абстрактный класс определяет сущность объекта, а реализация классом некоторого интерфейса — лишь один из аспектов поведения класса (либо действий, которые можно выполнять над этим классом).   
  
**Вопрос четвертый:** может ли быть такое, что в одном случае наследование от абстрактного класса порождает связь generalization, а в другом случае — realization. 

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

  

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

  

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

  

**Realization.** Когда часть поведения объекта выносится в отдельный класс — это называется реализацией. В программировании такой прием обычно называют делегированием, но UML похоже считает иначе.  

  

**Implementation.** В терминологии UML это как раз означает декомпозицию некого объекта на составные части. В программировании этот термин означает совсем другое… 

 Сие есть очень занимательно… никогда так глубоко не рыл, и вот…  

Даже по-русски «realization» и «implementation» переводятся как реализация — это я вроде знал, а в литературе такого разделения не встречал нигде. Поиск «realization» в вики ничего тоже не дел, что уже настораживает. А вот про implementation написано, что это есть realization :)  

  

«Implementation is the realization of an application, or execution of a plan, idea, model, design, specification, standard, algorithm, or policy.»  

  

Ладно, посчитаю, что это одно и то же.  

Тогда имеем, что generalization — это просто наследование, не важно, от абстрактного класса или нет.  

Implementation — реализация интерфейса (или чисто абстрактного класса).  

  

Итого, про первый вопрос я не знаю, что сказать, но высказал свое мнение.  

По второму — можно с некоторым уточнением, что это будет реализован (realized, implemnted) уже реальный метод, который в интерфейсе просто не мог быть реализован просто потому, что это интерфейс.  

По третьему — тут будет просто несколько связей, в зависимости от типа — например если реализуется несколько интерфейсов — то будет несколько связей «implementation», то же касается и generalization.  

По четвертому — если власс расширяет абстрактный и сам ничего не реализует (т.е. тоже является абстрактным), то тут просто не может быть реализации (implementation, realization) — т.е. тут чисто generalization. А если что-то реально реализуется — то тогда можно говорить о implementation (realization). 

 1)Вроде implementation это и есть реализация. Понятие наследования и реализации вроде правильны.  

2)Ну эти обе связи являются отношениями на уровне объектов, но можно ли считать realization подтипом связи generalization, я вам не отвечу.  

3)Я думаю generalization.  

4)Мне кажется нет, так как используется generalization, состояние наследуются тоже.