Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по ООАП.doc
Скачиваний:
6
Добавлен:
01.05.2025
Размер:
1.01 Mб
Скачать

Экзаменационный вопрос № 16. Идентификация объектно-ориентированных языков

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

Современный объектно-ориентированный язык предлагает, как правило, следующий обязательный набор синтаксических средств:

  • Объявление классов с полями (данными — членами класса) и методами (функциями — членами класса).

  • Механизм расширения класса (наследования) — порождение нового класса от существующего с автоматическим включением всех особенностей реализации класса-предка в состав класса-потомка. Большинство ООП-языков поддерживают только единичное наследование.

  • Полиморфные переменные и параметры функций (методов), позволяющие присваивать одной и той же переменной экземпляры различных классов.

  • Полиморфное поведение экземпляров классов за счёт использования виртуальных методов. В некоторых ООП-языках все методы классов являются виртуальными.

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

  • Конструкторы, деструкторы, финализаторы.

  • Свойства (аксессоры).

  • Индексаторы.

  • Интерфейсы (например, в Java используются также как альтернатива множественному наследованию — любой класс может реализовать сколько угодно интерфейсов).

  • Переопределение операторов для классов.

  • Средства защиты внутренней структуры классов от несанкционированного использования извне. Обычно это модификаторы доступа к полям и методам, типа public, private, обычно также protected, иногда некоторые другие.

Часть языков (иногда называемых «чисто объектными») целиком построена вокруг объектных средств — в них любые данные (возможно, за небольшим числом исключений в виде встроенных скалярных типов данных) являются объектами, любой код — методом какого-либо класса, и невозможно написать программу, в которой не использовались бы объекты. Примеры подобных языков — Smalltalk, Java, C#, Ruby, AS3. Другие языки (иногда используется термин «гибридные») включают ООП-подсистему в исходно процедурный язык. В них существует возможность программировать, не обращаясь к объектным средствам. Классические примеры — C++, Delphi и Perl.

Экзаменационный вопрос № 17.

Общая характеристика языка ООП С++

Язык возник в начале 1980-х годов, когда сотрудник фирмы Bell Laboratories Бьёрн Страуструп придумал ряд усовершенствований к языку C под собственные нужды.

Разрабатывая C с классами (позднее C++), Страуструп также написал программу cfront — транслятор, перерабатывающий исходный код C с классами в исходный код простого C. Новый язык, неожиданно для автора, приобрёл большую популярность среди коллег и вскоре Страуструп уже не мог лично поддерживать его, отвечая на тысячи вопросов.

В 1983 году произошло переименование языка из C с классами в C++. Кроме того, в него были добавлены новые возможности, такие как виртуальные функции, перегрузка функций и операторов, ссылки, константы, пользовательский контроль над управлением свободной памятью, улучшенная проверка типов и новый стиль комментариев (//). Его первый коммерческий выпуск состоялся в октябре 1985 года. В 1985 году вышло также первое издание «Языка программирования C++», обеспечивающее первое описание этого языка, что было чрезвычайно важно из-за отсутствия официального стандарта. В 1989 году состоялся выход C++ версии 2.0. Его новые возможности включали множественное наследование, абстрактные классы, статические функции-члены, функции-константы и защищённые члены.

В 1990 году вышло «Комментированное справочное руководство по C++», положенное впоследствии в основу стандарта. Последние обновления включали шаблоны, исключения, пространства имён, новые способы приведения типов и булевский тип.

Стандартная библиотека C++ также развивалась вместе с ним. Первым добавлением к стандартной библиотеке C++ стали потоки ввода/вывода, обеспечивающие средства для замены традиционных функций C printf и scanf. Позднее самым значительным развитием стандартной библиотеки стало включение в неё Стандартной библиотеки шаблонов.

Никто не обладает правами на язык C++, он является свободным. Однако сам документ стандарта языка (за исключением черновиков) не доступен бесплатно.

Основные элементы языка С++

Комментарии

В С++ есть два типа комментариев. // однострочные комментарии, /*комментарий */ комментарии который может занимать несколько строк.

Типы данных

Символьные: char, wchar_t.

Целочисленные знаковые: signed char, short int, int, long int (и long long int, в стандарте C++).

Целочисленные беззнаковые: unsigned char, unsigned short int, unsigned int, unsigned long int(и unsigned long long int, в стандарте C++).

С плавающей точкой: float, double, long double.

Логический: bool, имеющий значения true и false.

Логические операции

В С++ существует три логические операции:

1) Логическая операция И "&&";

2) Логическая операция ИЛИ "||";

3) Логическая операция НЕ "!" или логическое отрицание.

Присвоение

В С++ существует пять операций присваивания, не считая основную операцию присваивания: «=». Операции присваивания в С++:

1. += операция присваивания-сложения;

2. -= операция присваивания-вычитания;

3. *= операция присваивания-умножения;

4. /= операция присваивания-деления;

5. %= операция присваивания-остатка от деления.

Операторы выбора

В языке программирования С++ существует два оператора выбора:

1) Оператор выбора if

2) Оператор выбора switch

if

Условный оператор или оператор выбора if записывается в двух формах, рассмотрим первую.

if (/*проверяемое условие*/)

{

//тело условного оператора

}

Оператор выбора if else

if (/*проверяемое условие*/)

{

/*тело оператора выбора 1*/;

} else

{

/*тело оператора выбора 2*/;

}

Оператор множественного выбора switch

В С++ еще имеется оператор множественного выбора switch, который мы сейчас детально рассмотрим.

switch (/*переменная или выражение*/)

{

case /*константное выражение1/*:

{

/*группа операторов*/;

break;

}

case /*константное выражение2*/:

{

/*группа операторов*/;

break;

}

//. . .

default:

{/*группа операторов*/;

В языке программирования С++ существуют такие циклы:

  • цикл for

  • цикл while

  • цикл do .. while

// форма записи оператора цикла for:

for (/*выражение1*/; /*выражение2*/; /*выражение3*/ )

{

/*один оператор или блок операторов*/;

}

// форма записи цикла while

while (/*условие продолжения цикла while*/)

{

/*блок операторов*/;

/*управление условием*/;

}

// форма записи оператора цикла do while:

do // начало цикла do while

{

/*блок операторов*/;

}

while (/*условие выполнения цикла*/); //

конец цикла do while

Арифметические операции в C++:

+ сложение;

- вычитание;

* умножение;

/ деление;

% остаток от деления.

Объектно-ориентированные особенности языка

C++ добавляет к C объектно-ориентированные возможности. Он вводит классы, которые обеспечивают три самых важных свойства ООП: инкапсуляцию, наследование и полиморфизм.

В стандарте C++ под классом (class) подразумевается пользовательский тип, объявленный с использованием одного из ключевых слов class, struct или union, под структурой (structure) подразумевается класс, определённый через ключевое слово struct, и под объединением (union) подразумевается класс, определённый через ключевое слово union.

Описание функций в теле класса

В теле класса можно указать только заголовок функции, а можно описать всю функцию (см. пример с функцией Alloc ниже. В этом случае она считается встраиваемой (inline))

Константные функции-члены

Нестатические функции-члены (и только они) могут иметь описатель const

class Array

{

...

inline double operator[] (int n) const;

Такие функции не имеют права изменять поля класса (кроме полей, определённых как mutable). Если они пытаются это сделать, компилятор должен выдать сообщение об ошибке.

Наследование

В C++ при наследовании одного класса от другого наследуется реализация класса, плюс класс-наследник может добавлять свои поля и функции или переопределять функции базового класса. Множественное наследование разрешено.

Конструктор наследника вызывает конструкторы базовых классов, а затем конструкторы нестатических членов-данных, являющихся экземплярами классов. Деструктор работает в обратном порядке.

Наследование бывает публичным, защищённым и закрытым (то есть закрытого типа):

Доступ члена базового класса/режим наследования private-член protected-член public-член

private-наследование недоступен private private

protected-наследование недоступен protected protected

public-наследование недоступен protected public

Наследник — это больше чем базовый класс, поэтому, если наследование открытое, то он может использоваться везде, где используется базовый класс, но не наоборот.

Полиморфизм

Полиморфизмом в программировании называется переопределение наследником функций-членов базового класса,

Структура программы на языке С++

#include <iostream>// подключаем библиотеку

using namespace std;

int main()\\ заголовок функции

{

int a,b,c,d,x,y,z; //Объявление переменных

cin >> a;\\ ввод переменных

cin >> b;

cin >> c;

cin >> d;

x=a+b;

y=c+d;

z=x+y;\\ считаем формулу

cout << z<< endl;\\ выводим результат

system ("pause");\\ строка паузы, чтобы смогли увидеть результат вычислений

return 0;}