Класс (ООП)

Класс (ООП)

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

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

Содержание

Теоретический подход

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

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

Практический подход

В современных объектно-ориентированных языков программирования (в том числе в php, Oberon, Ruby, Object Pascal) создание класса сводится к написанию некоторой структуры, содержащей набор полей и методов (среди последних особую роль играют конструкторы, деструкторы, финализаторы). Практически класс может пониматься как некий шаблон, по которому создаются объекты — экземпляры данного класса. Экземпляры одного класса созданы по одному шаблону, поэтому имеют один и тот же набор полей и методов.

Отношения между классами

  • Наследование (Генерализация) — объекты дочернего класса наследуют все свойства родительского класса.
  • Ассоциация — объекты классов вступают во взаимодействие между собой.
  • Агрегация — объекты одного класса входят в объекты другого.
  • Композиция — объекты одного класса входят в объекты другого и зависят друг от друга по времени жизни.
  • Класс-Метакласс — отношение, при котором экземплярами одного класса являются другие классы.

Виды классов

  • Базовый (родительский) класс
  • Производный класс (наследник, потомок)
  • Абстрактный класс
  • Виртуальный класс
  • Интерфейс

Эти виды классов описаны в статье Наследование, так как связаны именно с этим отношением.

Члены классов

Класс определяется как список своих членов. К членам класса относятся его поля (свойства) и функции (методы) .

Каждому члену класса можно установить его область доступа (access control level). Область доступа члена класса определяет участки кода, из которых к этому члену будет возможно обращаться. В большинстве объектно-ориентированных языков программирования поддерживаются следующие области доступа:

  • private (закрытый, внутренний член класса) — обращения к члену допускаются только из кода методов класса, в котором этот член определён. Любые наследники класса уже не смогут получить доступ к этому члену;
  • protected (защищённый, внутренний член иерархии классов) — обращения к члену допускаются из кода методов класса, в котором этот член определён, или из любых его классов-наследников;
  • public (открытый член класса) — обращения к члену допускаются из любого кода.

Область видимости

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

Область видимости самого класса по-разному определяется в разных языках программирования. В одних языках (таких как модуля), в других (таких как пакетом), в третьих (таких как C++ и C#) область видимости класса определяется пространствами имён (namespaces), которые задаются программистом явно и могут совпадать или не совпадать с единицами компиляции.

Классы в языке Delphi

На языке Delphi класс описывается следующим образом:

 TMyClass = class(TObject)
 private
   {Описанные в этой секции элементы не доступны извне (за пределами класса, но доступны в пределах модуля).}
   {Здесь обычно находятся поля класса.}
 protected
   {Описанные в этой секции элементы доступны только классу и всем его потомкам.}
 public
   {Описанные в этой секции элементы доступны всем.}
 published
   {Описанные в этой секции элементы доступны всем и отображаются в Object Inspector'e.}
 end;

  • TMyClass — имя класса;
  • class — ключевое слово, начинающее определение класса;
  • TObject — класс-предок, если есть наследование;
  • private, protected, public, published — ключевые слова, обозначающие секции областей доступа.

Создается экземпляр (объект) класса так:

 MyClass := TMyClass.Create;

Уничтожается так:

 MyClass.Free;

Классы в языке C++

Класс в языке C++ создаётся следующим образом:

 class MyClass: ParentClass // ParentClass — класс-предок, если таковой имеется
 {
     public:
        // элементы в этой секции доступны из любой части программы
     protected:
        // элементы в этой секции доступны из класса и его потомков
     private:
        // элементы в этой секции доступны только из класса; это область доступа по умолчанию
     MyClass() // конструктор
     ~MyClass() // деструктор
 }

После своего создания класс считается полноценным типом данных и, следовательно экземпляры класса создаются следующим образом:

 MyClass myinstance;

Обращение к членам класса:

 myinstance.classmember

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

Классы в языке C Sharp

Классы в языке C# определятся следующим образом:

public class MyClass
{
   public;
   //Члены, доступные любому классу программы
   internal;
   //Члены, доступные любому классу в том же модуле программы
   internal protected;
   //Члены, доступные текущему классу и всем его подклассам в том же модуле программы
   protected;
   //Члены, досутпные только текущему классу и всем его подклассам
   private;
   //Члены, доступные только из текущего класса (тип по умолчанию).
}

Классы в языке Python с помощью оператора class:

 class MyClass:
     def __init__(self, arg):
         """Конструктор"""
         self._arg = arg    # свойство объекта
     def method1(self, x):
         """метод, входящий в интерфейс класса""" 
     def _method2(self, x):
         """метод, не входящий в интерфейс класса"""

Создание экземпляра класса:

 myinstance = MyClass(4)

Уничтожение экземпляра класса:

 del myinstance

Классы в языке Java с помощью оператора class:

 class MyClass {
     String name = "Example";
     
     // "Конструктор"
     public MyClass(String name) {
         this.name = name;
     }
     
     // "Метод" 
     public String getName() {
         return name;
     }
 }

Создание экземпляра класса:

 MyClass my = new MyClass("Example 2");

Уничтожение экземпляра класса:

 происходит с помощью "сборщика мусора" автоматически.

Ссылки

  • Creating Classes — Руководство по созданию классов в языке Классы — PPT-файл одной из лекций курса «Объектно-ориентированный анализ и дизайн»

См. Также



Wikimedia Foundation. 2010.

Игры ⚽ Поможем сделать НИР

Полезное


Смотреть что такое "Класс (ООП)" в других словарях:

  • Класс (программирование) — У этого термина существуют и другие значения, см. Класс. Класс в программировании набор методов и функций. Другие абстрактные типы данных  метаклассы, интерфейсы, структуры, перечисления  характеризуются какими то своими, другими… …   Википедия

  • Интерфейс (ООП) — Интерфейс (от лат. inter  между и лат. face  поверхность)  это семантическая и синтаксическая конструкция в коде программы, используемая для специфицирования услуг, предоставляемых классом или компонентом. Интерфейс определяет границу… …   Википедия

  • Хрупкий базовый класс — Хрупкий базовый класс  фундаментальная проблема объектно ориентированного программирования. Описание Проблема хрупкого базового класса заключается в том, что малейшие правки в деталях реализации базового класса могут привнести ошибку в… …   Википедия

  • Абстрактный класс — в объектно ориентированном программировании базовый класс, который не предполагает создания экземпляров. Абстрактные классы реализуют на практике один из принципов ООП полиморфизм. Абстрактный класс может содержать (и не содержать[1]) абстрактные …   Википедия

  • Вспомогательный класс (информатика) — Вспомогательный класс (англ. Helper Class)  метод программирования в ООП, который не рекомендуется использовать[кем?]. Вспомогательный класс  термин, применяемый к классу, который используется для помощи в реализации некоторой… …   Википедия

  • ActionScript — Класс языка: Объектно ориентированный, Императивный, скриптовый Появился в: 1998 Автор(ы): Гари Гроссман …   Википедия

  • Объектно-ориентированное программирование — Эта статья во многом или полностью опирается на неавторитетные источники. Информация из таких источников не соответствует требованию проверяемости представленной информации, и такие ссылки не показывают значимость темы статьи. Статью можно… …   Википедия

  • ООАП — Объектно ориентированное программирование (ООП) парадигма программирования, в которой основными концепциями являются понятия объектов и классов (либо, в менее известном варианте языков с прототипированием прототипов). Класс это тип, описывающий… …   Википедия

  • Объектно-ориентированный подход — Объектно ориентированное программирование (ООП) парадигма программирования, в которой основными концепциями являются понятия объектов и классов (либо, в менее известном варианте языков с прототипированием прототипов). Класс это тип, описывающий… …   Википедия

  • Полиморфизм (программирование) — У этого термина существуют и другие значения, см. Полиморфизм. Эта статья или раздел нуждается в переработке. Пожалуйста, улучшите статью …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»