Аннотация: В данной лекции рассматривается логика объектно-ориентированного подхода. Описание классов и объектов. Основные элементы класса: поля, методы, указатель this, конструкторы, деструкторы, операции. Дружественные функции и классы. Указатели на элементы классов
ООП как развитие идей структурного подхода
Презентацию к лекции Вы можете скачать здесь.
В окончательном виде любая программа представляет собой набор инструкций процессора. Все, что написано на любом языке программирования — более удобная, упрощенная запись этого набора инструкций, облегчающая написание, отладку и последующую модификацию программы. Чем выше уровень языка, тем в более простой форме записываются одни и те же действия.
С ростом объема программы становится невозможным удерживать в памяти все детали, и становится необходимым структурировать информацию, выделять главное и отбрасывать несущественное. Этот процесс называется повышением степени абстракции программы.
Для языка высокого уровня первым шагом к повышению абстракции является использование функций, позволяющее после написания и отладки функции отвлечься от деталей ее реализации, поскольку для вызова функции требуется знать только ее интерфейс . Если глобальные переменные не используются, интерфейс полностью определяется заголовком функции.
Java SE. Урок 17. Поля и методы
Следующий шаг — описание собственных типов данных, позволяющих структурировать и группировать информацию, представляя ее в более естественном виде. Например, все разнородные сведения, относящиеся к одному виду товара на складе, можно представить с помощью одной структуры.
Для работы с собственными типами данных требуются специальные функции. Естественно сгруппировать их с описанием этих типов данных в одном месте программы, а также по возможности отделить от ее остальных частей. При этом для использования этих типов и функций не требуется полного знания того, как именно они написаны — необходимы только описания интерфейсов. Объединение в модули описаний типов данных и функций, предназначенных для работы с ними, со скрытием от пользователя модуля несущественных деталей является дальнейшим развитием структуризации программы.
Все три описанных выше метода повышения абстракции преследуют цель упростить структуру программы, то есть представить ее в виде меньшего количества более крупных блоков и минимизировать связи между ними. Это позволяет управлять большим объемом информации и, следовательно, успешно отлаживать более сложные программы.
Введение понятия класса является естественным развитием идей модульности. В классе структуры данных и функции их обработки объединяются. Класс используется только через его интерфейс — детали реализации для пользователя класса не существенны.
Идея классов отражает строение объектов реального мира — ведь каждый предмет или процесс обладает набором характеристик или отличительных черт, иными словами, свойствами и поведением. Программы в основном предназначены для моделирования предметов, процессов и явлений реального мира, поэтому удобно иметь в языке программирования адекватный инструмент для представления моделей.
Статические методы | Фрагмент лекции JavaRush — университета
Класс является типом данных, определяемым пользователем. В классе задаются свойства и поведение какого-либо предмета или процесса в виде полей данных (аналогично структуре) и функций для работы с ними. Создаваемый тип данных обладает практически теми же свойствами, что и стандартные типы (напомню, что тип задает внутреннее представление данных в памяти компьютера, множество значений, которое могут принимать величины этого типа, а также операции и функции, применяемые к этим величинам).
Существенным свойством класса является то, что детали его реализации скрыты от пользователей класса за интерфейсом. Интерфейсом класса являются заголовки его открытых методов . Таким образом, класс как модель объекта реального мира является черным ящиком , замкнутым по отношению к внешнему миру.
Идея классов является основой объектно-ориентированного программирования ( ООП ). Основные принципы ООП были разработаны еще в языках Simula -67 и Smalltalk , но в то время не получили широкого применения из-за трудностей освоения и низкой эффективности реализации . В С++ эти концепции реализованы эффективно и непротиворечиво , что и явилось основой успешного распространения этого языка и внедрения подобных средств в другие языки программирования.
Идеи ООП не очень просты для практического использования (их неграмотное применение приносит гораздо больше вреда, чем пользы), а освоение существующих стандартных библиотек требует времени и высокого уровня первоначальной подготовки.
Конкретные переменные типа данных » класс » называются экземплярами класса, или объектами. Объекты взаимодействуют между собой, посылая и получая сообщения. Сообщение — это запрос на выполнение действия, содержащий набор необходимых параметров. Механизм сообщений реализуется с помощью вызова соответствующих функций. Таким образом, с помощью ООП легко реализуется так называемая «событийно-управляемая модель», когда данные активны и управляют вызовом того или иного фрагмента программного кода 1 Событийно-управляемая модель не является частью ООП и может быть реализована и без использования объектов (пример — программирование на языке С под Windows с использованием функций API). .
Примером реализации событийно-управляемой модели может служить любая программа , управляемая с помощью меню . После запуска такая программа пассивно ожидает действий пользователя и должна уметь правильно отреагировать на любое из них. Событийная модель является противоположностью традиционной (директивной), когда код управляет данными: программа после старта предлагает пользователю выполнить некоторые действия (ввести данные, выбрать режим) в соответствии с жестко заданным алгоритмом.
Свойства ООП
Основными свойствами ООП являются инкапсуляция , наследование и полиморфизм . Ниже кратко поясняется их смысл, а полное представление о них можно получить после изучения этой и следующей лекций.
Объединение данных с функциями их обработки в сочетании со скрытием ненужной для использования этих данных информации называется инкапсуляцией ( encapsulation ). Инкапсуляция повышает степень абстракции программы: данные класса и реализация его функций находятся ниже уровня абстракции , и при написании программы информация о них не нужна. Кроме того, инкапсуляция позволяет изменить реализацию класса без модификации основной части программы, если интерфейс остался прежним (например, при необходимости сменить способ хранения данных с массива на стек ).
Инкапсуляция позволяет использовать класс в другом окружении и быть уверенным, что класс не испортит не принадлежащие ему области памяти, а также создавать библиотеки классов для применения во многих программах.
Наследование — возможность создания иерархии классов, когда потомки наследуют все свойства своих предков, могут их изменять и добавлять новые. Свойства при наследовании повторно не описываются, что сокращает объем программы. Выделение общих черт различных классов в один класс-предок является мощным механизмом абстракции — ведь и любая наука начинается с абстрагирования и классификации, которые помогают справиться со сложностью рассматриваемой предметной области .
Иерархия классов представляется в виде древовидной структуры, в которой более общие классы располагаются ближе к корню, а более специализированные — на ветвях и листьях. В С++ каждый класс может иметь сколько угодно потомков и предков. Иногда предки называются надклассами или суперклассами , а потомки — подклассами или субклассами.
Третьим китом, на котором стоит ООП , является полиморфизм — возможность использовать в различных классах иерархии одно имя для обозначения сходных по смыслу действий и гибко выбирать требуемое действие во время выполнения программы.
Понятие полиморфизма используется в С++ весьма широко. Простым примером полиморфизма может служить перегрузка функций, когда из нескольких вариантов выбирается наиболее подходящая функция по соответствию ее прототипа передаваемым параметрам. Другой пример — использование шаблонов функций, когда один и тот же код видоизменяется в соответствии с типом, переданным в качестве параметра. Чаще всего понятие полиморфизма связывают с механизмом виртуальных методов .
Использование при программировании понятий, более близких к предметной области , благодаря представлению программы в терминах поведения объектов является большим преимуществом ООП . Однако проектирование такой программы представляет собой весьма сложную задачу, поскольку в процесс добавляется еще один важный этап — разработка иерархии классов.
Плохо спроектированная иерархия приводит к созданию сложных и запутанных программ. Важно до начала проектирования правильно определить, требуется ли вообще применять объектно-ориентированный подход . Если в иерархии классов нет необходимости, то, как правило, достаточно ограничиться модульной технологией.
Сейчас мы перейдем к рассмотрению фундамента, без которого невозможно написать ни одну объектно-ориентированную программу — синтаксических правил описания объектов, а потом вернемся к обсуждению принципов ООП и методов проектирования объектных программ, поскольку «только хорошее понимание идей, стоящих за свойствами языка, ведет к мастерству» (Б. Страуструп).
Описание класса
Класс — это описание определяемого типа. Любой тип данных представляет собой множество значений и набор действий, которые разрешается выполнять с этими значениями. Например, сами по себе числа не представляют интереса — нужно иметь возможность ими оперировать: складывать, вычитать, вычислять квадратный корень и т. д. В С++ множество значений нового типа определяется задаваемой в классе структурой данных , а действия с объектами нового типа реализуются в виде функций и перегруженных операций С++ .
Данные класса называются полями (по аналогии с полями структуры), а функции класса — методами. Поля и методы называются элементами класса. Описание класса в первом приближении выглядит так:
class < [ private: ] public: >; // Описание заканчивается точкой с запятой
Спецификаторы доступа private и public управляют видимостью элементов класса. Элементы, описанные после служебного слова private , видимы только внутри класса. Этот вид доступа принят в классе по умолчанию.
Интерфейс класса описывается после спецификатора public . Действие любого спецификатора распространяется до следующего спецификатора или до конца класса. Можно задавать несколько секций private и public , порядок их следования значения не имеет.
Поля класса:
- могут быть простыми переменными любого типа, указателями, массивами и ссылками (т.е. могут иметь практически любой тип, кроме типа этого же класса, но могут быть указателями или ссылками на этот класс);
- могут быть константами (описаны с модификатором const ), при этом они инициализируются только один раз (с помощью конструктора ) и не могут изменяться;
- могут быть описаны с модификатором static , но не как auto , extern и register .
Инициализация полей при описании не допускается.
Классы могут быть глобальными (объявленными вне любого блока) и локальными (объявленными внутри блока, например, внутри функции или внутри другого класса). Обычно классы определяются глобально.
Локальные классы имеют некоторые особенности:
- локальный класс не может иметь статических элементов (уточнение: современные стандарты допускают это);
- внутри локального класса можно использовать из охватывающей его области типы, статические ( static ) и внешние ( extern ) переменные, внешние функции и элементы перечислений;
- запрещается использовать автоматические переменные из охватывающей класс области;
- методы локальных классов могут быть только встроенными ( inline ); (уточнение: согласно современным стандартам это необязательно)
- если один класс вложен в другой класс, они не имеют каких-либо особых прав доступа к элементам друг друга и могут обращаться к ним только по общим правилам.
В качестве примера создадим класс , моделирующий персонаж компьютерной игры. Для этого требуется задать его свойства (например, количество щупалец, силу или наличие гранатомета) и поведение. Естественно, пример будет схематичен, поскольку приводится лишь для демонстрации синтаксиса.
class monster < int health, ammo; public: monster(int he = 100, int am = 10) < health = he; ammo = am;>void draw(int x, int y, int scale, int position); int get_health() int get_ammo()>;
В этом классе два скрытых поля — health и ammo , получить значения которых извне можно с помощью методов get_health() и get_ammo() . Доступ к полям с помощью методов в данном случае кажется искусственным усложнением, но надо учитывать, что полями реальных классов могут быть сложные динамические структуры, и получение значений их элементов не так тривиально. Кроме того, очень важной является возможность вносить в эти структуры изменения, не затрагивая интерфейс класса.
Методы класса имеют неограниченный непосредственный доступ к его полям. Внутри метода можно объявлять объекты, указатели и ссылки как своего, так и других классов.
В приведенном классе содержится три определения методов и одно объявление (метод draw ). Если тело метода определено внутри класса, он является встроенным ( inline ). Как правило, встроенными делают короткие методы. Если внутри класса записано только объявление ( заголовок) метода , сам метод должен быть определен в другом месте программы с помощью операции доступа к области видимости :
void monster::draw(int x, int y, int scale, int position) < /* тело метода */>
Встроенные методы можно определить и вне класса с помощью директивы inline (как и для обычных функций, она носит рекомендательный характер):
inline int monster::get_ammo()
Методы можно перегружать (это одно из проявлений полиморфизма ), а также объявлять либо константными, либо статическими (но не одновременно).
В каждом классе есть метод, имя которого совпадает с именем класса. Он называется конструктором и вызывается автоматически при создании объекта класса. Конструктор предназначен для инициализации объекта . Автоматический вызов конструктора позволяет избежать ошибок, связанных с использованием неинициализированных переменных. Подробнее конструкторы описываются далее в разделе » Конструкторы «.
Типы данных struct и union являются специальными видами класса.
Источник: intuit.ru
NEWOBJ.ru → Введение в ООП с примерами на C# →
Состояние объекта (state) – перечень полей объекта (обычно статический) и текущих значений каждого из этих полей (обычно динамический).
Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой — мы готовы помочь.
Узнай цену своей работы —>
1 Данный компонент является основой программы Delphi :
- модуль ;
- процедура ;
- кнопка ;
- форма .
2 Данный компонент предназначен для вывода текста на поверхность формы:
3 Данный компонент представляет собой таблицу, ячейки которой содержат строки символов:
4 Данный компонент обеспечивает вывод на поверхность формы иллюстраций:
- Image ;
- Timer ;
- ListBox ;
- ComboBox .
5 Данный компонент дает возможность ввести данные в поле редактирования путем набора на клавиатуре или выбора из списка:
- Image ;
- Timer ;
- ListBox ;
- ComboBox .
6 Данный компонент представляет собой независимый переключатель:
- RadioGroup;
- CheckBox;
- RadioButtom;
- ListBox.
7 Данный компонент представляет собой список в котором можно выбрать нужный элимент:
- RadioGroup;
- CheckBox;
- RadioButtom;
- ListBox.
8 Выберите название окна в среде Delphi, определяющего свойства и обработчики событий компонентов:
- Form;
- Object Inspector;
- Delphi6 Project1;
- Object Tree View.
9 Выберите название окна в среде Delphi, представляющего иерархию компанетов:
- Form;
- Object Inspector;
- Delphi6 Project1;
- Object Tree View.
10 Для размещения кода программы пользователя служит:
- форма;
- дерево объектов;
- инспектор объектов;
- модуль.
11 Данное свойство компонента отвечает за текст, находящийся в поле ввода и редактирования:
12 Данное свойство компонента отвечает за шрифт, используемый для отображения текста:
13 Данное свойство компонента отвечает за его ширину:
14 Данное свойство компонента отвечает за расстояние от верхней границы компонента до верхней границы формы:
15 Данное свойство компонента отвечает за массив срок компонента:
16 Данное свойство компонента отвечает за номер элемента, выбранного в списке:
17 Данное свойство компонента отвечает за количество колонок таблицы:
- DefaultColWidth;
- DefaultRowHeight;
- RowCount;
- ColCount.
18 Данное свойство компонента отвечает за высоту строк таблицы:
- DefaultColWidth;
- DefaultRowHeight;
- RowCount;
- ColCount.
19 Данное свойство компонента отвечает за автоматическое масштабирование:
- Strech;
- Proportional;
- AutoSize;
- Center.
20 Данное свойство компонента Image отвечает за автоматическое масштабирование иллюстрации в соответствии с реальным размером компонента:
- Strech;
- Proportional;
- AutoSize;
- Center.
21 Данное свойство компонента Image отвечает за расположение картинки по центру:
- Strech;
- Proportional;
- AutoSize;
- Center.
22 Укажите какая функция в среде Delphi используется для преобразования значения действительного типа в строку:
- IntToStr;
- FloatToStr;
- RealToStr.
23 Данное событие происходит при нажатии клавиши клавиатуры:
- Click;
- DblClick;
- KeyPress;
- Create.
24 Данное событие происходит при создании объекта:
- Click;
- DblClick;
- KeyPress;
- Create.
25 Данное свойство отвечает за перенос слов на другую строку:
- Enabled ;
- Text;
- Visible ;
- WordWrap .
26 Замкнутый, обособленный фрагмент программы, сочетающий в себе поля и методы:
27 Специальный тип данных, используемый для описания объекта :
28 Единство внутри класса трех составляющих его сущностей: полей, методов и свойств:
- наследование;
- инкапсуляция;
- полиморфизм.
29 Возможность реализации одноименных, но алгоритмически разных методов в классе-родителе и классе потомке:
- наследование;
- инкапсуляция;
- полиморфизм.
30 Данное свойство позволяет изменять цвет объекта
31 Программа на языке Паскаль может содержать следующие символы:
- Латинские буквы, цифры, специальные символы;
- Латинские буквы, цифры, специальные символы, русскоязычные символы;
- Любые символы.
32 Целочисленный тип переменных в TPascal описывается:
33 Строковый тип переменных в TPascal описывается:
34 Оператор ввода в среде TPascal:
35 Тело программы находится в промежутке:
- От begin до end;
- От program до begin;
- От var до begin .
36 Данный тип данных позволяет задавать две константы, которые определяют границы изменения переменных данного типа:
- перечисляемый ;
- логический ;
- интервальный .
37 Раздел описания переменных начинается с зарезервированного слова:
38 Раздел описания типов начинается с зарезервированного слова:
3 9 Оператор выбора в TPascal
- For. to…do ;
- If. then. else ;
- Case..of .
4 0 Условный оператор в TPascal
- For. to…do ;
- If. then. else ;
- Case..of .
41 Определите значение целочисленной переменной у после выполнения фрагмента программы:
42 Какой из операторов цикла в TPascal является оператором с постусловием:
- Repeat….until;
- For….to….do;
- While….do .
43 Какой из операторов цикла в TPascal является оператором с предусловием:
- Repeat….until;
- For….to….do;
- While….do .
44 Определить результат операции Y =12345 div 10:
45 Определить результат операции Y =12345 mod 10:
46 set2: set of ‘a’..’z’:
- Определение записи;
- Определение массива;
- Определение множества.
- Последовательность символов одного типа;
- структурированный тип данных, состоящий из фиксированного числа элементов одного типа;
- структурированный тип данных, состоящий из фиксированного числа элементов.
48 Эта функция возвращает символ (тип char ), соответствующий коду x :
- Ord( x ) ;
- Chr( x ) ;
- Pos( x ) .
49 Эта функция возвращает значение типа byte , являющееся кодом символа x :
- Ord( x ) ;
- Chr( x ) ;
- Pos( x ) .
50 Процедуры и функции этого модуля позволяют управлять работой клавиатуры, текстовым выводом на экран и звуком:
51 Процедуры и функции этого модуля обеспечивают работу с экраном дисплея в графическом режиме:
52 Для того, чтобы связать файловую переменную в программе с файлом на диске используется процедура:
53 Файл можно открыть для записи и очистить при помощи процедуры:
54 Данная процедура выводит точку с заданным цветом
- PutPixel;
- Circle;
- SetBkColor;
- Line .
55 Данная процедура устанавливает цвет фона
- PutPixel;
- Circle;
- SetBkColor;
- Line .
56 Каким оператором в языке TPascal описывается одномерный массив:
- Array [1..n,1..m];
- Array [1..n];
- Array [1..n,1..m,1..k].
57 Виды развилки в TPascal:
- полная и неполная ;
- вложенная ;
- полная, неполная, вложенная .
58 Оператор присваивания в языке Pascal
59 a = Array [1..10] of Integer :
- Определение записи ;
- Определение массива ;
- Определение множества .
60 Выберите из предложенных вариантов значение, которое используется в TPascal для типа Real:
61 Диалог отвечающий за изменение шрифта:
- ColorDialog;
- FontDialog;
- SaveDialog.
62 Данный диалог предназначен для создания окна диалога «Открыть файл»:
- OpenPictureDialog;
- SaveDialog;
- OpenDialog.
63 Функция Log10 :
- вычисляет натуральный логарифм ln(x);
- вычисляет десятичный логарифм;
- вычисляет логарифм аргумента по основанию N.
- вычисляет квадрат аргумента Х;
- вычисляет квадратный корень аргумента Х;
- округляет число к ближайшему целому.
65 Функция Round :
- вычисляет квадрат аргумента Х;
- вычисляет квадратный корень аргумента Х;
- округляет число к ближайшему целому.
66 Функция Random :
- генерирует случайное число с отклонением по Гауссу;
- генерирует случайное число в заданном диапазоне;
- инициализирует генератор случайных чисел.
67 Символ «А» шаблона маски означает:
- что в данной позиции должен быть любой символ;
- что в данной позиции должна быть буква или цифра;
- что в данной позиции должна быть цифра.
68 Событие onExit возникает:
- когда компонент теряет фокус ввода;
- при двойном щелчке мышкой по компоненту;
- при отпускании клавиатурной кнопки она оказалась в верхнем положении;
69 Данное событие возникает при перемещении указателя мышки над компонентом:
- onMouseDown;
- onMouseUp;
- onMouseMove.
70 Свойство MultiSelect отвечает за:
- выделение нескольких компонентов;
- множественный выбор в списке;
- поиск в списке.
71 Свойство ItemIndex отвечает за:
- индекс выбранной строки;
- количество выбранных строк;
- индекс последней строки.
Узнать стоимость написания работы —>
Материалы собраны группой SamZan и находятся в свободном доступе
Источник: samzan.net