> For the complete documentation index, see [llms.txt](https://opu.gitbook.io/oop/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://opu.gitbook.io/oop/first-term/labs/laboratornaya-rabota-6/abstraktnye-klassy-i-interfeisy-v-uml.md).

# Абстрактные классы и интерфейсы в UML

## Абстрактный класс

**Абстрактный класс** - это класс, который нельзя реализовать непосредственно. Вместо этого создается экземпляр подкласса. Обычно абстрактный класс имеет одну или более абстрактных операций. У абстрактной операции нет реализации, это чистое объявление, которые клиенты могут привязать к абстрактному классу.

Наиболее распространенным способом обозначения абстрактного класса или операции в UML является написание их имен курсивом. Можно также сделать свойства абстрактными, определяя абстрактное свойство или методы доступа. Если курсив сложно изобразить (например, если вы рисуете на доске), можно прибегнуть к метке **{abstract}**.

Для указания класса как абстрактного, выделите класс и выделите чекбокс **isAbstract**.

![](/files/-MIzBlrLWUnIaRKNja-N)

Для указания метода как абстрактного, выделите метод и выделите чекбокс **isAbstract**.

![](/files/-MIzBwA7Ijsr822x2mpI)

## Интерфейс

**Интерфейс** - это класс, не имеющий реализации, то есть вся его функциональность абстрактна. Интерфейсы прямо соответствуют интерфейсам в Java или C# и являются общей идиомой в других типизированных языках. Интерфейс обозначается стереотипом (ключевым словом) **<\<interface>>**.

### Обозначение интерфейса в StarUML

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

![](/files/-MIzAd23-vuZd5G79zmz)

Для того, чтобы преобразовать его в классический интерфейс согласно стандарту UML, выделите интерфейс и в панели **Editors** выберите **Format -> Label**.

![](/files/-MIzArF2KRhP_ObIi37T)

После этого снимите выделение с пункта "**Suppress Operations**"

![](/files/-MIzBYzdYTBLDSr95uM9)

## Пример использования абстрактного класса и интерфейса

Графическое представление в формате UML

![](/files/-MIzDeT4oVukHv1UipRZ)

Исходный код

```java
interface MyInterface{
    void interfaceMethod();
}

abstract class MyAbstractClass implements MyInterface {
    abstract void abstractMethod();
}

class MyClass extends MyAbstractClass {

    @Override
    void abstractMethod() {}

    @Override
    public void interfaceMethod() {}
}
```
