Объект что это в информатике
Объект (программирование)
Содержание
Связанные понятия
Экземпляр класса (англ. instance ) — это описание конкретного объекта в памяти. Класс описывает свойства и методы, которые будут доступны у объекта, построенного по описанию, заложенному в классе. Экземпляры используют для представления (моделирования) конкретных сущностей реального мира. Например, экземпляром класса стиральных машин может быть ваша стиральная машина, имеющая следующие свойства: компания-производитель «Вятка», наименование модели «Вятка-автомат», серийный номер изделия ВЯТ454647, емкость 20 л. В отличие от имени класса, имя экземпляра обычно начинается со строчной буквы.
Инстанцирование (англ. instantiation ) — создание экземпляра класса. В отличие от слова «создание», применяется не к объекту, а к классу. То есть, говорят: (в виртуальной среде) создать экземпляр класса или, другими словами, инстанцировать класс. Порождающие шаблоны используют полиморфное инстанцирование.
Анонимный объект (англ. anonymous object ) — это объект, который принадлежит некоторому классу, но не имеет имени.
Инициализация (англ. initialization ) — присвоение начальных значений полям объекта.
Время жизни объекта — время с момента создания объекта (конструкция) до его уничтожения (деструкция).
Практический подход
За исключением прототипно-ориентированных языков вроде Lua и JavaScript, где понятие «класс» не используется вовсе, в большинстве объектно-ориентированных языков программирования (таких как Java, C++ или C#), объекты являются экземплярами некоторого заранее описанного класса.
Объекты в таких языках создаются с помощью конструктора класса, и уничтожаются либо с помощью деструктора класса (например, в C++), либо автоматически с использованием сборщика мусора (например, в Java и C#), либо используя внутренний счётчик ссылок на объект и сообщения («dealloc» в Objective-C). (C# поддерживает деструкторы, но они вызываются сборщиком мусора.) Объект хранится в виде данных всех его полей и ссылок на таблицу виртуальных методов и RTTI своего класса. Класс определяет набор функций и служебной информации для построения объекта, в том числе необходимый объем памяти для хранения объекта.
В языке Python все значения являются объектами, даже классы. В этом языке можно построить класс, экземплярами которого будут классы. Такие классы называются метаклассами.
Пример кода
Пример создания нового объекта и работы с ним в языке программирования Java:
Примечания
Литература
Логический • Низший тип • Коллекция • Перечисляемый тип • Исключение • First-class function • Opaque data type • Recursive data type • Семафор • Поток • Высший тип • Type class • Unit type • Void
Абстрактный тип данных • Структура данных • Интерфейс • Kind (type theory) • Примитивный тип • Subtyping • Шаблоны C++ • Конструктор типа • Parametric polymorphism
Полезное
Смотреть что такое «Объект (программирование)» в других словарях:
Динамический объект (программирование) — Динамическая память оперативная память компьютера, предоставляемая программе (процедуре, подпрограмме) при ее работе. Динамическое размещение данных означает распределение динамической памяти непосредственно при работе программы или… … Википедия
Объект (значения) — В Викисловаре есть статья «объект» Объект (от лат. objectum предмет) то, на что направлена та или иная деятельность (или то, что создано этой деятельностью); в более широком значении любой предмет вообще. Объект нечто … Википедия
Объект — (от лат. objectum предмет): В Викисловаре есть статья «объект» … Википедия
Объект — в программировании программный модуль: объединяющий в себе данные (свойства) и операции над ними (методы); обладающий свойствами наследования, инкапсуляции и полиморфизма. Объекты взаимодействуют между собой, посылая друг другу сообщения. По… … Финансовый словарь
программирование — 01.01.62 программирование [ programming]: Деятельность по разработке, написанию, модификации и отладке программ. Источник … Словарь-справочник терминов нормативно-технической документации
Объект первого класса — Объектами первого класса («first class object») в контексте конкретного языка программирования называются сущности, которые могут быть переданы как параметр, возвращены из функции, присвоены переменной[1]. Термин был впервые использован в… … Википедия
программирование по месту применения — 05.02.14 программирование по месту применения [ field programming]: Запись данных на радиочастотную метку, выполняемая после ее отправки с завода изготовителя OEM заказчику1) или конечному пользователю, или в распределительные центры изготовителя … Словарь-справочник терминов нормативно-технической документации
ПРОГРАММИРОВАНИЕ ТЕОРЕТИЧЕСКОЕ — математическая дисциплина, изучающая математич. абстракции программ, трактуемых как объекты, выраженные на формальном языке, обладающие определенной информационной и логич. структурой и подлежащие исполнению на автоматич. устройствах. П. т.… … Математическая энциклопедия
Программирование основанное на прототипах — Прототипное программирование стиль объектно ориентированного программирования, при котором отсутствует понятие класса, а повторное использование (наследование) производится путём клонирования существующего экземпляра объекта прототипа.… … Википедия
ПРОГРАММИРОВАНИЕ — особая форма организации проблемного мышления и деятельности. Расширяющееся в настоящее время пространство развития превалирование процессов искусственных преобразований указывает на то, что в мире массовое распространение получают гуманитарные… … Социология: Энциклопедия
Учитель информатики
Сайт учителя информатики. Технологические карты уроков, Подготовка к ОГЭ и ЕГЭ, полезный материал и многое другое.
§ 1. Объекты окружающего мира
Информатика. 6 класса. Босова Л.Л. Оглавление
Объекты и множества
Объект — это любая часть окружающей действительности (предмет, процесс, явление), воспринимаемая человеком как единое целое. Объектами принято называть всё то, на что обращено внимание человека.
Так, телефон, стол, книга, кошка — примеры объектов-предметов. Каникулы, учёба, чтение, поездка — примеры объектов-процессов. Гроза, солнечное затмение, снегопад — примеры объектов-явлений.
Множество — это совокупность, набор, коллекция объектов. Объекты, составляющие некоторое множество, называются его элементами.
Множество может, в частности, состоять из трёх, двух, одного элемента или быть пустым (например, множество отличников в классе). Множество может быть конечным (например, множество цифр или множество букв русского алфавита). Множество может быть бесконечным (например, множество натуральных чисел).
Каждый объект имеет имя, которое позволяет отличать его от других объектов. Имя объекта человек называет, отвечая на вопрос «Что это такое?» или «Кто это такой?».
Общаясь, люди передают друг другу самые разнообразные сведения о реальных и воображаемых объектах, обозначая объекты именами — словами языка. Но в различных ситуациях один и тот же объект может получать разные имена.
Например, собака — это объект реального мира. Собаку можно назвать Каштанкой, пёсиком, домашним животным или просто животным. Чем отличаются эти имена и от чего зависит выбор того или иного имени?
Имена бывают общими, обозначающими множество объектов, и единичными, обозначающими конкретный объект в некотором множестве.
Например, городам Лондон, Манчестер и Ливерпуль можно дать такие общие имена: «город», «европейский город», «город в Англии». Наиболее точным в данном случае будет общее имя «город в Англии». А для городов Москва, Париж, Лондон и Мадрид наиболее точным будет общее имя «столичный европейский город». Все упоминавшиеся здесь города образуют множество с общим именем «европейский город».
При выборе имени для конкретного объекта некоторого множества — единичного имени объекта — нужно придерживаться следующего правила: у всех объектов множества имена должны быть разными.
Например, если во дворе растет одна берёза, то жильцы дома могут использовать единичное имя «берёза», потому что они рассматривают не множество всех растений в мире, а множество деревьев в своём дворе. Если во дворе две берёзы, на столе пять чашек, в книжном шкафу много книг, то будут использоваться более длинные единичные имена, например: «берёза у окна», «голубая чашка», «книга по истории, которая лежит на нижней полке шкафа» (рис. 1).
Чтобы обойтись без таких длинных обозначений, для некоторых видов объектов (людей, домашних животных, книг, журналов, кинофильмов, географических объектов, планет и т. д.) используются собственные имена. Например: Александр Сергеевич Пушкин, роман «Война и мир», Мухтар, Москва, Ангара, кинофильм «Ночной дозор», Луна.
Объекты изучения в информатике
Разные науки изучают и исследуют разные объекты или одни и те же объекты, но с разных сторон. Например, космические тела изучаются на уроках астрономии, земная поверхность — на уроках физической географии, растительный и животный мир — на уроках биологии, прошлое человечества — на уроках истории, принципы работы некоторых технических устройств — на уроках физики и технологии, пространственные формы и количественные отношения — на уроках математики.
Информатика — наука, изучающая закономерности протекания процессов передачи, хранения и обработки информации в природе, обществе, технике, а также способы автоматизации этих процессов с помощью компьютера.
Объектами изучения в информатике являются информация, информационный процесс, алгоритм, исполнитель, компьютер, включая его аппаратное и программное обеспечение, и т. д.
Признаки объектов
Кроме имени в сообщении об объекте человек может подробно перечислить его признаки: свойства, действия, поведение, состояния.
Свойства объектов отвечают на вопросы: «Чем может отличаться один объект от другого?», «Что может измениться у объекта при выполнении действия? ».
Например, собаки могут отличаться друг от друга окрасом, города — численностью населения, реки — длиной; при редактировании документа его размер может уменьшиться, при нагревании воды увеличивается её температура.
Каждое свойство определяется некоторой величиной и тем значением, которое она принимает. Примеры величин: цвет, материал, форма, длина. Примеры значений: красный, железный, прямоугольный, 2 м.
В таблице 1 приведены объекты, их свойства, а также величины и значения величин, соответствующие этим свойствам.
Таблица 1
Возможности объекта обозначаются именами действий, отвечающими на вопросы: «Что он может делать?» (активное действие) или «Что с ним можно делать?» (пассивное действие).
Например, далматин бегает, операционная система управляет работой компьютера, воздушный шар можно надуть, файл — переименовать, модифицировать, удалить и т. д.
Чтобы описать поведение объекта, нужно не просто назвать имена действий, а составить пошаговое описание каждого действия, свойственного этому объекту.
Без этого информация об объекте будет неполной. Ведь действие с одним и тем же именем различные объекты могут совершать по-разному.
Например, птицы, воздушные шары и вертолёты неодинаково летают, а действие «строить» человек по-разному выполняет с домами, мостами и тоннелями.
Говоря о состоянии объекта, человек называет или подразумевает определённое сочетание всех или некоторых свойств этого объекта.
Например, под хорошей погодой человек может понимать определённую температуру воздуха (тепло), отсутствие сильного ветра (тихо) и осадков (солнечно). Когда с объектом выполняется действие, его состояние изменяется. Например, с воздушным шариком можно связать величины «объём» (в литрах), «высота» (в метрах над Землёй) и «поврежденность» (наличие дырок). Когда воздушный шар надувают, изменяется его объём. Во время полёта шара будет увеличиваться высота, на которой он находится. А когда шарик лопнет и упадёт, изменятся значения сразу всех трёх величин.
Самое главное
Объект — это любая часть окружающей действительности (предмет, процесс, явление), воспринимаемая человеком как единое целое.
Множество — это совокупность, набор, коллекция объектов.
Каждый объект имеет имя, которое позволяет отличать его от других объектов. Имена бывают общими, обозначающими множество объектов, и единичными, обозначающими конкретный объект в некотором множестве.
В сообщении об объекте человек может описать его признаки — свойства, действия, поведение, состояние.
Урок информатики в 9-м классе по теме: «Что такое объект»
Оборудование и материалы: дидактический материал, демонстрационный экран, мультимедиапроектор, компьютеры, учебники.
Тип урока: объяснение нового материала.
Организационная форма урока: эвристическая беседа, самостоятельная работа на компьютерах.
I. Организационный момент. (1 мин)
II. Подготовка учащихся к усвоению нового материала (3 мин)
III. Усвоение новых знаний (12 мин)
IV. Первичное закрепление материала. Практическое задание. (10 мин)
VI. Домашнее задание (2 мин)
VII. Вопросы учеников. (5 мин)
VIII. Итог урока. (2 мин)
1. Организационный момент
Приветствие. Проверка готовности учащихся к уроку, организация внимания. На правой половине доски выписана трехуровневая задача урока. На левой половине доски выписаны основные понятия, изучаемые на данном уроке. Ученики приветствуют учителя и демонстрируют готовность к уроку.
2. Актуализация знаний
Учитель. На прошлом уроке мы попытались ответить на вопросы: что является предметом изучения информатики? Можно ли рассматривать информатику в отрыве от других наук?
Ученики пытаются сформулировать ответ:
– Среди ученых нет единого мнения о предмете изучения информатики. Очевидно только, что информатика неразрывно связана практически с любой областью человеческой деятельности, а следовательно, со всеми школьными предметами.
Учитель. Любая наука имеет свою терминологию, которую необходимо знать для успешного изучения данной науки. Скажите, пожалуйста, какие математические, термины вам уже знакомы?
– Уравнение, точка, множество, функция и т. д.
Учитель. Предмет “Информатика” также имеет свою терминологию. Как правило, это неопределяемые понятия, которые объясняются с точки зрения современного состояния информатики. Сегодня мы познакомимся с некоторыми из них.
Работаем с левой, а затем с правой стороной доски.
Ученики знакомятся с основными понятиями и задачей урока. Учитель отвечает на вопросы (если они появятся).
3. Усвоение новых знаний
Учитель. Рассмотрим все возможные представления об объекте как понятии.
В мире, в котором мы живем, нас окружает множество объектов. В философии объектом называют любую вещь, предмет, т.е. материализованную часть внешнего мира. Он может быть представлен в виде данных.
В информатике объектом является либо любой адресуемый элемент, который предоставляет определенный сервис, либо предмет, система, процесс, явление, событие, факт, которым мы дали имя с целью их анализа.
В учебном процессе, когда внимание учеников должно быть направлено на изучение окружающей действительности понятие “объект” выступает в ином ракурсе.
Объект – это предмет, явление, процесс, отношение, на что обращена наша познавательная деятельность. Характеризуется целостностью, состоянием, поведением, идентичностью.
Каждый предмет имеет форму и состоит из того или иного вещества (материала). Это материальные объекты.
Посмотрите вокруг, и вы увидите многочисленные примеры одушевленных и неодушевленных предметов. Это представители живой природы – люди, животные, растения и т.д. Большим разнообразием отличаются изделия, созданные руками человека: компьютер, книга и др.
Перечисленные объекты материальны и имеют форму. Можно привести примеры объектов, которые не имеют определенной формы: снег, песок, вода и пр.
Нематериальным объектом является также и то, что создается в результате умственной деятельности человека: стихи, музыкальные произведения, сочинения и т.д.
Ученики слушают объяснение учителя и записывают определения в тетрадь.
Учитель. Приведем примеры объектов-предметов (а также любых живых существ).
Ученики называют: стол, окно, карандаш, собака, кошка и т.д. Это оказалось очень просто!
Учитель. Приведем примеры объектов-явлений.
Ученики называют : дождь, снег, вулкан, гроза, осень.
Учитель. Приведем примеры объектов-процессов.
Ученики называют : учеба, выборы, суд, поездка, каникулы.
Дети приводят примеры, каждый свои, не повторяясь и не перебивая друг друга.
Учитель. Каждый объект обязательно как-то называется. Имя – это основная характеристика, которая позволяет отличить один объект от другого.
Как правило, в обыденной жизни используется общее имя, обозначающее объекты с похожими характеристиками: комната, собака, песня.
Многим объектам, чтобы конкретизировать их, дают имя собственное. Так, собственными имена есть у многих географических объектов: город Москва, гора Арарат, река Волга.
А если имя объекта вам незнакомо? Тогда понадобятся дополнительные характеристики, которые позволят отличить данный объект от других, например форма, цвет, область использования, назначение и т.д. Чем более точно и подробно составлено описание объекта, тем легче его узнать.
4. Первичное закрепление материала
Далее учитель предлагает детям поработать на компьютере: заполнить таблицу. Образец таблицы представлен ученикам на демонстрационном экране с помощью компьютера и мультимедиапроектора.
Практическое задание. Самостоятельно заполните таблицу в программе Microsoft Word.
Имя объекта | Краткое описание (характеристики объекта) |
Стол | Горизонтальная поверхность на опоре, предназначенная для работы на ней |
Книга | |
Дождь | |
Урок | |
Выборы президента |
Затем учитель и ученики совместно разбирают выполненное задание. Далее они переходят к следующей таблице, расширяющей понятие “объект”.
Учитель. Любой признак или свойство можно рассматривать как объект. Надо только этому признаку или свойству дать имя. Таблица представлена ученикам на демонстрационном экране с помощью мультимедиапроектора.
Объект (его имя) | Характеристики объекта (их имена, значения) |
Глаза | Миндалевидные, голубые |
Отрезок | 4 см |
Туфли | Черные (словесная характеристика), 37-го размера (числовая характеристика) |
По образцу самостоятельно написать характеристики для двух объектов по своему выбору в программе Microsoft Word.
Происходит активное обсуждение некоторых вопросов в форме беседы.
Вопросы для закрепления новой темы на уроке:
а) выросшим на яблоне;
б) посещающим детский сад;
в) посещающим лицей;
г) проживающим в Москве;
д) продающимся в “Детском мире”:
е) находящимся в библиотеке;
ж) работающим на тракторе;
з) преподающим в школе.
2. К какой части речи относится понятие “объект”?
3. Какие объекты можно выделить в:
а) одноголосной мелодии;
б) трехголосной мелодии;
г) фрагменте стихотворения “Глядя на луч пурпурного заката, стояли мы на берегах Невы…”?
4. Можно ли число характеризовать какой-либо величиной?
5. Можно ли прямую на плоскости характеризовать какой-либо величиной?
Если ученики затрудняются ответить на некоторые вопросы, учитель пытается с помощью наводящих вопросов натолкнуть их на правильный ответ.
6. Домашнее задание
1.Знать, что такое “объект”, “имя объекта”, “характеристики объекта”.
2. Приводить примеры объектов.
7. Вопросы учеников
Ответы на вопросы учащихся.
Подведение итога урока. Выставление оценок.
На уроке мы узнали, что же такое объект, имя объекта, характеристики объекта; обсудили характеристики объектов, приводили примеры объектов-предметов, объектов-явлений, объектов-процессов.
ООП – Организация Освобождения Палестины.
Аббревиатура.
Резонный вопрос – почему так поздно приступаем к знакомству с ООП? Я тоже считаю, что некоторые главы книги только бы выиграли от их изложения в объектно-ориентированной нотации. Но, сказавши «а», следовало бы сказать и «б», т.е. пришлось бы полностью изложить принципы ООП, а это было бы не совсем правильно:
эта технология ориентирована на создание уже достаточно больших проектов, хотя отдельные части проекта (например, методы классов) все равно разрабатываются в рамках традиционной технологии структурного программирования. Поэтому, на мой консервативный взгляд, чтобы почувствовать преимущества технологии ООП, надо иметь опыт разработки проектов определенной сложности в традиционной технологии;
многие механизмы объектно-ориентированного Си прекрасно иллюстрируются средствами классического Си, чтобы понимать первое, нужно знать второе;
все предыдущие главы иллюстрированы небольшими по объему программами, для которых объектно-ориентированная нотация (именно как для примеров) не обязательна;
ООП – это постановка процесса программирования «с ног на голову», (или с головы на ноги), а это лучше сделать не в середине изложения материала;
И, наконец, такой «монстр» как Си++, пытающийся сочетать в себе все и вся, имеет не совсем удобную, излишне открытую и довольно громоздкую объектно-ориентированную нотацию. Поэтому данный материал следует рассматривать как приглашение к знакомству с тотальными средами ООП, например, Java или C#.
10.1 Объекты и классы
Объект, метод, класс: определения и свойства
«Классами называются большие группы людей, различающиеся по их месту в исторически определенной системе общественного производства, по их отношению) к средствам производства, по их роли в общественной организации труда, а следовательно, по способам получения и размерам той доли общественного богатства, которой они располагают» Ленинское определение классов.
Строго говоря, реализовать идеи ООП можно в классической среде программирования, соблюдая дух, а не букву технологии. Например, библиотека функций, работающая на общую структуру данных, может в первом приближении считаться классом.
Прописные истины объектно-ориентированного подхода
Объектно-ориентированный подход не ограничен синтаксисом. Следует соблюдать не только букву, но и дух ООП. Но даже в самой реализации понятий класса и объекта в языке программирования имеется много очевидных, но не всегда упоминаемых вещей, которые следует помнить. Попробуем их здесь перечислить.
для каждого объекта создается экземпляр данных;
методы класса, с которыми работает объект, представляют собой единственный экземпляр программного кода в сегменте команд, который одинаково выполняется для всех объектов (разделяется ими);
при вызове метода объект, для которого он выполняется, идентифицируется указателем текущего объекта this, задающим контекст текущего объекта.
Таким образом, связка «объект-метод» преобразуется в традиционную последовательность действий: «вызов функции – метода класса с фактическим параметром – указателем на текущий объект».
public: void F() < a++; >// void A::F(A *this) < this->a++; >
если элементы данных класса имеют взаимосвязанные значения, то класс должен поддерживать установленные для них соглашения;
если объект данных класса ссылается на внешние структуры данных, то при синтаксическом копировании объекта необходимо обеспечить независимость связанной структуры данных в объекте-копии (создать ее копию или обеспечить разделение – см. «конструктор копирования»;
если объект содержит идентификаторы каких-либо внешних ресурсов (например, номер коммуникационного порта), то действия класса должны быть аналогичными.
рис. 101-1. Объект: граница ответственности транслятора и программы
double * pd ; // Внутренняя СД – дин. массив коэффициентов
public : void add ( double D 2[], int n 2)<> // Нарушение закрытости – параметр – внутренняя СД
void add ( poly & T )<> // Правильно: параметр – объект того же класса
По отношению к методам это означает, что интерфейс класса (набор методов) должен быть максимально разнообразен, методы должны сочетаться в любых комбинациях, давая широкое разнообразие возможностей работы с объектом.
Полезный совет: желательно избегать многообразия форм представления внутренних данных объекта. Чем их меньше, тем проще обеспечить его целостность и корректность. Например, лучше иметь фиктивный динамический массив, чем NULL-указатель. В примере с классом степенного полинома «пустой» полином лучше представить динамическим массивом с единственным нулевым коэффициентом.
double * pd ; // Внутренняя СД – дин. массив коэффициентов
public : poly () < n =0; pd = NULL ; >// Нежелательно: NULL – отсутствие массива
«Ложась спать, программист ставит рядом два стакана: один полный – если захочет пить, и один пустой – если не захочет». Анекдот в тему.
// Класс степенного полинома – заголовок класса (объявление)
int n; // степень полинома
double *pd; // динамический массив коэффициентов
double & get ( int k ); // получение ссылки на коэффициент
void add ( poly & T ); // сложение объектов (1=1+2)
void mul ( poly & T ); // умножение объектов объектов (1=1+2)
Целостность объекта. Конструктор. Деструктор
Требование целостности и корректности объекта означают, что объект – это нечто большее, чем просто переменная. При создании переменной ее инициализация вовсе не обязательна, в то время как создание объекта должно сопровождаться установлением его начального состояния (инициализация данных, резервирование памяти, ресурсов, установление связей и т.д.). Аналогичные обратные действия необходимо выполнить при его уничтожении перед освобождением памяти. С этой целью в классе вводятся специальные методы – конструкторы и деструктор. Их имена совпадают с именем класса. Конструкторов для данного класса может быть сколь угодно много, они отличаются формальными параметрами, деструктор же всегда один и имеет имя, предваренное символом «
«. Если конструктор имеет формальные параметры, то в определении переменной-объекта после ее имени должны присутствовать в скобках значения фактических параметров.
// Класс степенного полинома – конструкторы и деструктор
int n; // степень полинома
double *pd; // динамический массив коэффициентов
n=0; // с нулевым коэффициентом
n=m; // с нулевыми коэффициентами
load(n0,p); > // используется вспомогательный метод load
load(T.n, T.pd); > // (конструктор копирования)
Момент вызова конструктора и деструктора определяется временем создания и уничтожения объектов:
В Си++ возможно определение массива объектов класса. При этом конструктор и деструктор автоматически вызываются в цикле для каждого элемента массива и не должны иметь параметров. При выполнении оператора delete для указателя на массив объектов его необходимо предварять скобками.
poly a,b(6), c (3, D ); // Статические объекты – конструкторы
// пустой полином, заданной размерности и из массива
poly *p,* q ; // Указатели на объект
poly c,d( c ); // Автоматические объекты
p = new poly ; // Динамический объект
q = new poly [ n ]; // Динамический массив объектов
delete p; // Уничтожение динамического объекта
delete [] q ; // Уничтожение динамического массива объектов
> // Уничтожение автоматических объектов
Замечание: процесс конструирования «вложен» в процесс выделением памяти под переменную. Конструктор вызывается сразу же после выделения памяти, а деструктор – перед ее освобождением.
A(int a1) // Конструктор
Класс – структурированный тип с ограниченным доступом
«Настоящий» классы в Си++ отличается от структурированного типа одной единственной мелочью: в классе вводятся ограничения доступа. Естественно, это синтаксические ограничения, и при желании их можно исключить простым редактированием заголовка класса. Это «дисциплинирующие» ограничения, позволяющие установить зоны ответственности программистов – разработчика класса и пользователя класса, обеспечить необходимую закрытость.
В процессе программирования класса участвуют два действующих лица с различной компетенцией: разработчик класса, пишущий его внутренний код, и пользователь класса – программист, создающий объекты этого класса и вызывающий для них его методы. Но ограничения касаются не самих программистов, а кода, который они создают. Внутреннее программирование класса – это разработка программного кода, который находится в теле разрабатываемого класса (точнее, в теле его методов). Внешнее программирование – это разработка кода вне тела проектируемого класса, который создает объекты класса, работает с данными этих объектов и вызывает методы.
Формально класс отличается от структурированного типа ключевым словом class (вместо struct ) и наличием двух областей доступа в теле класса:
закрытая (личная) часть, допускает только внутреннее программирование и закрыта при доступе через объект вне класса. По правилам синтаксиса закрытая часть начинается сразу же вслед за заголовком класса. Она также может быть обозначена меткой private;
открытая (общая) часть класса допускает любой доступ, в том числе и внешний. Она всегда явно обозначается меткой public.
// Класс степенного полинома
int n; // степень полинома
double *pd; // динамический массив коэффициентов
public:… // метка открытой части
Другие варианты размещения данных и методов в личной и общей части класса встречаются реже, но тоже обоснованы:
в общей части класса могут быть размещены данные, изменение которых пользователем класса не может привести к катастрофическим последствиям (например, цвет фигуры). Естественно, что класс будет учитывать изменение этих данных только при вызове методов (например, при перерисовке фигуры);
в личной части класса может быть размещен внутренний метод, необходимый для работы самого класса. Это могут быть вспомогательные действия, вынесенные за пределы конкретных методов, либо такие операции, корректное выполнение которых требует дополнительных действий.
Иногда требуется ввести исключения из правил доступа, когда некоторой функции или классу требуется разрешить доступ к личной части объекта класса. Тогда в определении класса, к объектам которого разрешается такой доступ, должно быть объявление функции или другого класса как «дружественных». Это согласуется с тем принципом, что сам класс определяет права доступа к своим объектам «со стороны».
Объявление дружественной функции представляет собой прототип функции, переопределяемой операции или имя класса, которым разрешается доступ, предваренное ключевым словом friend.
// Классы и функции, дружественные классу A
int x; // Личная часть класса
. // Все «друзья» имеют доступ к x
friend void C::operator+( А &);
«Друг – это тот, кто имеет исключительное право лезть тебе в душу (личную часть) в любое время».
Возвращаясь к классу полиномов, сразу же заметим, что в нем можно по большей части обойтись без дружественности. Закрытость же касается только данных (размерность и указатель на динамический массив), а также методов, связанных с управлением динамической памятью при изменении размерности полинома.
Задача управления динамической памятью должна быть решена раз и навсегда в начале проектирования класса, чтобы в дальнейшем к ней не возвращаться. Удобнее всего сделать это в виде внутренних методов управления размерностью объекта. Предпочтительнее также создавать дополнительные локальные объекты требуемой размерности, нежели создавать в явном виде динамические структуры данных.
// Класс степенного полинома
int n; // степень полинома
double *pd; // динамический массив коэффициентов
void load(int n0, double p[])<
n=n0; // закрытый метод загрузки массива
double *pd1=new double[n1+1];
for (; i n 1; i ++) pd 1[ i ]=0;// прописать старшие коэффициенты нулями
delete []pd; // удалить старый массив
pd=pd1; // считать новый за старый
> // память не перераспределяется
public :… // метка открытой части
Рассмотрим еще один метод, интересный с точки зрения требований закрытости. Метод возвращает ссылку на выбранный коэффициент полинома, что позволяет работать с ним как по чтению, так и по записи. Хотя это «приоткрывает» доступ к внутренним данным объекта, но реальное использование этой ссылки «во вред объекту» и доступ через нее к другим коэффициентам требует большого искусства и не может быть произведено несознательно (по ошибке). Поэтому такую операцию можно считать безопасной.
// Класс степенного полинома
int n; // степень полинома
double *pd; // динамический массив коэффициентов
if ( k k > n ) return foo ; // на «левую» статическую переменную
Взаимодействие данных и алгоритма в ООП
В технологии ООП взаимоотношения данных и алгоритма имеют более регулярный характер: во-первых, класс объединяет в себе данные и методы (функции). Во-вторых, схема взаимодействия функций и данных принципиально иная. Метод (функция), вызываемый для одного объекта, как правило, не вызывает другую функцию непосредственно. Для начала он должен иметь доступ к другому объекту (создать, получить указатель, использовать внутренний объект в текущем и т.д.), после чего он уже может вызвать для него один из известных методов. Следовательно, структура программы определяется взаимодействием объектов различных классов между собой, а процесс выполнения программы выражается фразой «объект-метод-объект».
рис.101-4. Программирование в цепочке «объект-метод-объект»
Особенности модульного проектирования в технологии ООП
· заголовочный файл не должен содержать конструкций языка, порождающих программный код, он должен целиком состоять из определений типов, объявлений переменных и функций и заголовка класса;
· в заголовке класса может присутствовать объявление метода – заголовок со списком типов параметров (прототип), ограниченный точкой с запятой. Это означает, что в заголовочнике упоминается только факт его наличия (с заданным именем и интерфейсом). Тогда в файле тела класса должно быть определение метода, содержащее его заголовок и тело. Заголовок повторяет объявление с одним маленьким отличием: имя метода дается в полной форме в виде имя_класса::имя_метода;
· файл тела класса должен подключать свой заголовочный файл директивой include ;
· для того, чтобы другой класс или main могли создавать объекты некоторого класса и применять к ним методы, необходимо подключать заголовочный файл директивой include ;
· все имена заголовочных файлов и файлов тела класса должны быть включены в проект;
int a; // Данные класса
void add ( A &); // Объявление (прототип) метода
A mul ( A &); // Объявление (прототип) метода
Естественно, никто не запрещает «свалить все классы в одну кучу», не используя проекта. Для небольших программ это простительно, но не эстетично.
Лабораторный практикум
1. Правильная дробь, представленная целой частью, числителем и знаменателем.
4. Целое положительное число, представленное в виде массива его простых множителей (произведение которых дает это число).
5. Целое положительное число, представленное в виде массива остатков от деления на первые n 6. Вектор на плоскости, представленный в полярной системе координат (длина, угол поворота).
8. Матрица переменной размерности, представленная динамическим массивом указателей на строки матрицы (линейные динамические массивы).
9. Матрица переменной размерности, представленная динамическим массивом, в котором строки матрицы расположены последовательно друг за другом.
10. Разреженная матрица переменной размерности, ненулевые коэффициенты представлены динамическим массивом с элементами (x,y,v) координаты, значение.
11. Разреженная матрица переменной размерности, ненулевые коэффициенты представлены односвязным списком с элементами (x,y,v) координаты, значение.
12. Разреженная матрица переменной размерности, ненулевые коэффициенты представлены двусвязным циклическим списком с элементами (x,y,v) координаты, значение.
13. Множество, элементами которого являются целые числа. Операции объединения и пересечения множеств, добавления элемента, проверки на вхождение, разности множеств.
14. Целые произвольной длины со знаком во внешней форме представления в виде строки цифр в прямом коде. Знак представлен отдельным элементом данных.
15. Целые произвольной длины со знаком во внешней форме представления в виде строки цифр в прямом коде. Знак представлен старшей цифрой (0 /1).
16. Целые произвольной длины со знаком во внешней форме представления в виде строки цифр в дополнительном коде.
17. Целые произвольной длины во внутреннем двоичном представлении (динамический массив байтов) в прямом коде. Знак представлен отдельным элементом данных.
18. Целые произвольной длины во внутреннем двоичном представлении (динамический массив байтов) в дополнительном коде.