|
Программирование >> Программирование на языке c++
(код) функции (т. е. совокупность и последовательность выполнения ее инструкций). Описание объекта задает его тип (т. е. имя класса) и, возможно, некоторые параметры, которые необходимы для инициализации. При описании объекта мы даем указание на его построение на основании заданного типа (класса). При построении объекта вызывается специальная функция класса, называемая конструктором (constructor). Конструктор управляет выделением памяти для объекта, строит объект в памяти и, возможно, инициализирует его компоненты-данные. Наряду с конструктором существует другая функция класса, называемая деструктором (destructor). Деструктор разрушает объект, т. е. удаляет его из памяти. Говоря об объекте, можно выделить две его характеристики: интерфейс и реализацию (рис. 1.5). Интерфейс показывает, как объект общается с внешней средой. Его рассматривают как окно в некотором черном ящике, через которое можно заглянуть внутрь и получить доступ к функциям и данным объекта. Все данные делят на глобальные и локальные. Локальные данные являются недоступными (их не видно в окне). Изменение локальных данных и получение их значений можно осуществить только в функциях-компонентах этого же объекта (о некоторых исключениях из этого правила будет сказано ниже). С другой стороны, глобальные данные можно менять и РЕАЛИЗАЦИЯ ДАННЫЕ <)У11КЦИ11
глобальные компоненты Рис. 1. 5. Пример объекта получать их значения через окно (т. е. извне). Выше говорилось, что если мы хотим, чтобы объект выполнил что-то полезное , мы посылаем ему сообщение. Сообщение проходит через окно и активизирует некоторую глобальную функцию, которая и выполняет это что-то полезное . Тип сообщения определяется именем функции и значениями аргументов, которые It нес передаются. Обратим внимание на то, что доступ через окно можно получить только к глобальным функциям. JIoKajn.in.ie компоненты-функции доступны только внутри класса (о некоторых исключениях из этого правила будет сказано 1П1же). Когда мы говорим о реализации объекта, мы подразумеваем особенности реализации функций соответствующего класса, г. с. здесь речь идет о специфике алгоритмов и кода функций, заданных описаниями функций (см. рис. 1.4) для соответ-ствуюп1его класса. Основная идея класса как абстрактного типа заключается в разделении интерфейса и реализации. Говоря о разделении, мы подразумеваем следующее. Интерфейс показывает, как мы можем использовать класс. Мы хотим, чтобы это использование было эффективным. Однако нас совершенно не интересует, каким образом соответствующие функции реализованы внутри класса. Реализация - это внутренняя особенность класса. Когда разрабатывается код внутренней функции, учитываются уже другие критерии. Одним из основных является критерий изоляции кода ([)ункции (инструкций и данных) от воздействия на него извне. Здесь можно использовать локальные компоненты-данные класса, через которые осуществляется взаимодействие между различными функциями этого класса, и локальные компоненты-функции класса. В любом случае интерфейс и реализация должны быть максимально независимы друг от друга. В первую очередь это понимается так. Изменение кода внутренних функций, возможное в процессе развития программных продуктов, не должно изменять соответствующий интерфейс. Все основные вопросы, которые имеют отношение к объектам и классам, будут рассмотрены в гл. 3. При этом надо обратить внимание на следующие переменные, конструкции и понятия: конструирование и разрушение объектов, размещаемых в памяти разного типа (автоматическая память, статиче- 2 В, Л. Скляров 33 екая память и свободно выделяемая, или динамическая, память). Конструкторы и деструкторы; > атрибуты компонентов класса private (локальный или с полным запретом доступа), protected (защищенный или с ограниченным доступом) и public (глобальный или доступный извне). Они используются для управления доступом к компонентам объекта через окно; -♦- указатель this. Каждый объект (не класс) OBJECT имеет свой собственный указатель this, который хранит адрес самого объекта OBJECT в памяти компьютера; спецификатор const, который позволяет разделить компоненты-данные класса на две группы - для записи и чтения и только для чтения; встроенные (inline) и невстроенные функции класса; ф- спецификатор friend и его использование для организации внешнего доступа (через окно) к локальным (правильнее сказать, ко всем) компонентам класса; ф- использование полных имен компонентов класса, задаваемых в виде: имя класса::имя компонента; ф- использование вложенных классов или как описать один класс в другом классе; ф- использоваьше статических компонентов-данных класса, которые определяются как статически размещаемые или общие данные для всех объектов одного и того же класса, и компонентов-данных с ограниченной видимостью , т. е. для которых не используется внешняя компоновка (external linkage); -ф- использование статических компонентов-функций класса, которые имеют только ограниче;нную видимость ; -ф- объявление класса: как собственно класса (class), как структуры (struct) и как смеси (union). Класс - это тип, определенный пользователем. Нетрудно провести аналогию между типами, определенными пользователями, и фундаментальными типами, определенными в самом языке программирования. Например, int - это фундаментальный тип целое или фундаментальный класс в языках C/C++. Описание int a,b; задает переменные а и b целого
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |