|
Программирование >> Программирование на языке c++
Так описывается структура в языке С. Она имеет имя RECORD и состоит из двух полей - символьного массива name и целого age (представляющих, например, имя и возраст). В действительности структура позволяет описать абстрактный тип данных или тип данных, определенный программистом. Наше описание (RECORD) - это только абстракция, так как в памяти компьютера место под поля name и age вьщелено не будет. Таким образом, по нашему определению RECORD - это класс. Рассмотрим теперь любую из двух конструкций: struct RECORD { char name[50]; int age; } R1,R2,R3; RECORD R1,R2,R3; В обоих случаях мы определили 3 объекта: R1, R2 и R3. Теперь структура (класс) RECORD показывает, как строить каждый объект в памяти компьютера. Например, в персональном компьютере любой объект будет занимать 52 байта в памяти (50 байт для массива name и 2 байта для переменной age). Объекты R1, R2 и R3 - это уже не абстракция, а реальность, существующая в пространстве (в памяти компьютера) и во времени (в каждый момент времени они могут иметь определенные значения). Рассмотрим теперь конструкцию языка C+-I-: class RECORD private: char name[50]; int age; public; void set name(NAME); void set age(AGE); void change age(void); }; Здесь ключевые слова private и public позволяют установить различные возможности доступа к данным и функциям (доступ к данным возможен только из функций соответствующего объекта, а доступ к функциям - из-за пределов объекта). Это позволяет скрыть данные внутри объекта. Предположим, что класс RECORD используется для описания мно- жества людей. Он определяет два данных (имя - name и возраст - age) и три процедуры или функции: для записи в поле name конкретного имени NAME (см. set name), для записи в поле age конкретного возраста AGE (см. set age), для изменения возраста каждый год (см. change age). Теперь мы можем определить любое количество объектов, реально существующих в памяти и имеющих однотипные поля, например: RECORD R1,R2,R3,R4,R5,...; Таким образом, класс RECORD - это общее описание для множества объектов с общими структурой и поведением. Определим теперь понятия состояния, поведения и идентификации объекта. Состояние объекта объединяет все его поля данных (статический компонент) и текущие значения каждого из этих полей (динамический компонент). Поведение объекта определяет, как объект изменяет свои состояния и взаимодействует с другими объектами. Идентификация (распознавание) объекта - это свойство, которое позволяет отличить объект от других объектов того же или других классов. Выше уже говорилось, что процедурный (а также и модульный) подход позволяет строить программы, состоящие из набора процедур (подпрограмм), реализующих заданные алгоритмы. С другой стороны, объектно-ориентированный подход представляет программы в виде набора объектов, взаимодействующих между собой. Взаимодействие объектов осуществляется через сообщения. Предположим, что нашим объектом является окружность. Тогда сообщение, посланное этому объекту, может быть следующим: нарисуй себя . Когда мы говорим, что объекту передается сообщение, то на самом деле мы вызываем некоторую функцию этого объекта (компонент-функцию). Так, в приведенном выше примере мы вызовем функцию, которая будет рисовать окружность на экране дисплея. Понятие передача сообщения более естественным образом связано с окружающим нас миром, нежели понятие вызов функции . Рассмотрим простой пример. Предположим, что у нас описан класс ЛЮДИ и мы определили два объекта субъект 1 и субъект 2. Теперь субъект 1 обращается к субъект 2 с просьбой позвони мне завтра . Физически эта просьба выражается через обращение или переда- чу словесного сообщения (но никак не через вызов соответствующей функции в субъект 2). Логически субъект 2 должен выполнить какую-то последовательность действий, чтобы отреагировать на просьбу. Однако рассмотрение соответствующего алгоритма в действительности оторвано от жизни. Программируя различные задачи, мы пытаемся описать их с помощью имеющихся языков программирования. Для большого класса задач объектно-ориентированные языки могут быть использованы в более естественной, простой и наглядной форме. Объектно-ориентированные языки должны поддерживать объектно-ориентированный стиль программирования. Это значит, что соответствующий язык можно использовать легко и эффективно. Например, вы можете написать структурированную программу на ФОРТРАНе и объектно-ориентированную программу на языке С и даже на языке Ассемблера. Однако вы затратите очень большие усилия, поскольку указанные языки не поддерживают соответствующий стиль программирования. Приведем в заключение формальные определения объектов и классов [2]. Класс - это множество объектов, имеющих общие структуру и поведение [2, с. 103]. Класс - описание (абстракция), которое показывает, как построить существующую во времени и пространстве переменную этого класса, называемую объектом. Смысл предложений описание переменных класса и описание объектов класса один и тот же. Объект имеет состояние, поведение и паспорт (средство для его однозначной идентификации); структура и поведение объектов описаны в классах, переменными которых они являются [2, с. 83]. Состояние объекта выражается всеми (обычно неизменными) компонентами объекта и текущими (обычно изменяющимися) значениями этих компонентов [2, с. 85]. Поведение выражает динамику изменения состояний объекта и его реакцию на поступающие сообщения. Паспорт (уникальное имя) позволяет отличить объект от других объектов того же или других классов.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |