Воскресенье, 22.06.2025, 06:03
Приветствую Вас Гость | RSS

Основные принципы ООП

Меню сайта
Block title
Block content
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа

Каталог статей

Главная » Статьи » Логическая составляющая объектной модели

Структура класса

  Как отмечалось, объект имеет состояние и поведение. Соответственно класс должен иметь элементы для отображения состояния объектов этого класса и реализации его поведения через операции.

  Значения объекта, которые отвечают за его состояние, задаются в его классе через определение констант или переменных, что, чаще всего, помещают в его защищенной или закрытой части. Тем самым они инкапсулированы, и их изменения не влияют на клиентов.

  Константы и переменные, которые составляют состояние класса, известны под разными именами. В Smalltalk их называют переменные экземпляра, в Object Pascal - поля, в С++ - члены класса, а в SLOS- слоты. Некоторые авторы определяют элементы класса, которые отвечают за состояние, как атрибуты. Можно употреблять эти термины как синонимы.

  Некоторые атрибуты могут выступать как свойства. Существует принципиальная разница между атрибутами и свойствами. Все свойства являются атрибутами, но атрибут лишь тогда станет свойством, когда будет отвечать за внешнее проявление состояния объекта, то есть будет связанным с клиентом. Таким образом, пользователь (прямо или опосредствовано) будет иметь доступ к свойству.

  За местом расположения операции делятся на методы и свободные подпрограммы. Методы обязательно входят в определение класса объекта. В С++ они называются функциями-членами. Будем употреблять эти термины как синонимы. Свободные подпрограммы - это процедуры и функции, которые исполняют роль операций высокого уровня над объектом или объектами одного или разных классов. Свободные подпрограммы группируются в соответствии с классами, для которых они создаются. Это дает основание называть такие пакеты подпрограмм утилитами класса.

  Таким образом, можно утверждать, что все методы - операции, но не все операции - методы: некоторые из них являют собой свободные подпрограммы. Рекомендуется использовать лишь методы, хотя иногда трудно воздержаться от искушения, особенно если операция по своей природе выполняется над несколькими объектами разных классов, и нет никаких причин объявить ее операцией именно одного класса, а не другого. Иногда создание свободных подпрограмм является требованием синтаксических особенностей языка (например, операции обработки потоков в С++ должны конуры свободными подпрограммы).

  В сугубо объектно-ориентированных языках, таких как Smalltalk, операции могут быть лишь методами, потому что процедуры и функции вне классов в этом языке определять не допускается. Напротив, в языках Object Pascal, С++, SLOSі Ada допускается описывать операции как независимые от объектов подпрограммы. В С++ они называются функциями не членами; мы же будем здесь называть их свободными подпрограммами. В С++ принято собирать все логично связаны свободные подпрограммы и сообщать их частью некоторого класса, который не имеет состояния.

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

  Представьте себе автомат напитков, из которого вынули все напитки таким образом, чтобы автомат ни о чем "не узнал". Он будет честно принимать деньги, считая, что клиент получил свой напиток. Можно считать, что в работе автомату состоялся сбой. А какая ситуация возможна, если такой автомат будет работать как банкомат?

  Как правило, для обозначения модификатору и селектору используются префиксы Set и Get соответственно.

  В языке Object Pascal поле может принять особенный статус свойства класса лишь в том случае, если поле является инкапсулированным и для него созданы соответствующие модификатор и селе- ктор. Такие особенности, но пока в качестве рекомендаций, появились также в новых языках Java и С#. В С++ таких требований не существует - видимых отличий между атрибутами и свойствами нет.

  Названия операций "конструктор" и "деструктор" не совсем отвечают действительности. В действительности эти операции ничего не создают и не уничтожают. Конструктор вызывается сразу после создания объекта. Задача деструктора - вернуть динамическую память системе, что выделил объект, во время ликвидации объекта. Ликвидация самого объекта происходит после работы деструктору и без его участия. Конструктор и деструктор должны быть общедоступными методами класса.

  В языке С++ конструктор и деструктор составляют часть описания класса, тогда как в Smalltalk и СЮЗ эти операторы определены в протоколе цель класса (то есть классу класса).

Использование итератору уместно при создании так называемых классов-контейнеров, что предназначенные для хранения множественные числа значений: массивов, списков, деревьев, и тому подобное.


Категория: Логическая составляющая объектной модели | Добавил: Admin (03.01.2010)
Просмотров: 2090 | Комментарии: 1 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:

All rights reserved. © 2025
Конструктор сайтовuCoz