Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Voprosy_24-38.docx
Скачиваний:
19
Добавлен:
11.05.2015
Размер:
127.57 Кб
Скачать

24. История языка программирования C++. Принципы программирования на языке C++.

C++ является одним из самых популярных и востребованных языков программирования. В отличие от языка C, по сути своей являющегося структурным, где основой всего являются процедуры и функции, в C++ главенствующую роль занимают объекты и классы (подобный подход к программированию называют объектно-ориентированным). Необходимостью создания языка C++ стала, в первую очередь, невозможность выполнения насущных задач, стоявших перед программистами в 1990-е годы, ведущим в то время языком C. Первые попытки исправить эти недостатки стали предприниматься еще в начале 80-х годов. Уже тогда Бьерн Страуструп (корпорация AT&T, монополист телефонной связи на рынке США) стал разрабатывать расширение языка C под условным названием “C с классами”. Стиль ведения разработки вполне соответствовал духу, в котором создавался и сам язык C, - в него вводились многочисленные возможности с целью максимального упрощения работы конкретных людей и групп. Первый коммерческий транслятор нового языка, получившего в итоге название C++, появился в 1983 году. Он представлял собой препроцессор, транслировавший программу в код на C. Однако фактическим рождением языка можно считать выход в 1985 году книги Страуструпа. Именно с этого момента C++ начинает набирать всемирную популярность. Само название «C++» происходит от названия языка C, в котором оператор ++ обозначает инкремент переменной.

Бьерн Страуструп высвободил объектно-ориентированный потенциал C путем перенесения возможностей классов в C. Но при этом, C++ наследует как хорошие, так и плохие стороны С. Другим, но не менее основным источником вдохновения был язык Simula67. Концепция классов (с производными классами и виртуальными функциями) была позаимствована именно из него. Средства перегрузки операторов и возможность помещения объявлений в любом месте, где может быть записана инструкция, напоминает Algol68.

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

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

C++ широко используется для разработки программного обеспечения. Область его применения включает создание операционных систем, разнообразных прикладных программ, драйверов устройств, приложений для встраиваемых систем, высокопроизводительных серверов, а также развлекательных приложений (например, видеоигр). Существует несколько реализаций языка C++ — как бесплатных, так и коммерческих. Наиболее популярны проект GNU, Microsoft, Intel и Embarcadero (Borland). C++ оказал огромное влияние на другие языки программирования, в первую очередь на Java и C#.

Пример структуры программы языка C++

#include <fstream> // набор классов/функций для записи данных из/в файл

/* в зависимости от конкретных нужд количество директив препроцессора, в принципе, может быть любым */

void main (void) // основная функция main; главная программа, с выполнения которой обычно начинается любая программа на C/C++

{

}

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

Типы:

int (целый), float (вещественный), long double (длинный вещественный), char (символьный)

cin // консольный ввод

cout // консольный вывод

Операторы:

if // если

while // цикл с условием (выполняется, пока не выполняется условие)

for // цикл с условием (выполняется, пока выполняется условие)

NB ^_^

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

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

Функция — подпрограмма специального вида, которая, кроме получения параметров, выполнения действий и передачи результатов работы через параметры имеет ещё одну возможность — она может возвращать результат. Вызов функции является, с точки зрения языка программирования, выражением, он может использоваться в других выражениях.

Объектно-ориентированное программирование (ООП) — методология разработки программного обеспечения, в которой основными концепциями являются понятия объектов и классов.

Объект — сущность в адресном пространстве вычислительной системы, появляющаяся при создании экземпляра класса.

Класс — разновидность абстрактного типа данных в ООП, характеризуемый способом своего построения. По сути, класс является моделью ещё не существующей сущности (объекта). Фактически он описывает устройство объекта, являясь своего рода чертежом. Говорят, что объект — это экземпляр класса.

Инкапсуляция — свойство системы, позволяющее объединить данные и методы, работающие с ними, в классе и скрыть детали реализации от пользователя.

Наследование — свойство системы, позволяющее описать новый класс на основе уже существующего с частично или полностью заимствующейся функциональностью.

Полиморфизм — это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.

Транслятор — программа или техническое средство, выполняющее трансляцию программы. Транслятор обычно выполняет также диагностику ошибок, формирует словари идентификаторов, выдаёт для печати тексты программы и т. д.

Трансляция программы — преобразование программы, представленной на одном из языков программирования, в программу на другом языке и, в определённом смысле, равносильную первой.

Компилятор — программа или техническое средство, выполняющее компиляцию. Машинная программа, используемая для компиляции. Программа, переводящая текст программы на языке высокого уровня в эквивалентную программу на машинном языке. Программа выполняющая (после трансляции) компоновку программы.

Компиляция — трансляция программы на язык, близкий к машинному, и последующая её компоновка.

25. Понятие объекта и класса.

Класс – определённый программистом тип, к которому относятся любые структуры данных, определённые посредством ключевых слов class, struct и union. При определении класса значительно расширяются возможности языка C++, так как в дальнейшем этот класс можно использовать как любой другой тип. Как только класс определён, можно создавать объекты этого класса, каждый из которых имеет члены, определённые в классе. Классы основаны на понятии структуры языка C, которая может содержать поля данных, а также расширяться за счёт поддержки функций. Эти функции-члены (методы) определяют операции над объектами класса. Другой важной функцией классов является наличие закрытых (private) членов, доступ к которым извне не возможен и, более того, узнать о их существовании практически невозможно.

Объект – некоторый набор данных, которые могут иметь связанные с ними функции. Каждый объект является реализацией конкретного класса, который определяет поля данных объекта и его поведение.

Класс – тип, определённый программистом. Этот тип применим ко всему, что создано с использованием ключевого слова class.

Определение класса:

class <имя класса>

{

private:

<объявления>

public:

<объявления>

protected:

<объявления>

};

В конце объявления класса (как и любых переменных, к примеру) обязательно наличие точки с запятой.

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

Ключевые слова, задающие область действия (видимости) членов класса:

private (закрытый) – члены класса определяются только внутри класса и вне его использоваться не могут

public (открытый) – члены класса определены как для членов класса, так и вне его

protected (защищённый) – члены класса определены для членов класса, его потомков и друзей (подробнее в вопросе о наследовании)

private, public, protectedатрибуты доступа к членам класса

При отсутствии явного указания области видимости они автоматически определяются как закрытые и недоступны вне определения класса.

Графическая точка на экране монитора (данные – координаты x, y и цвет; функции-члены – инициализация точки, определение цвета). Пример программы:

class GraphPoint

{

private:

int x,y, color;

public:

void inlt (int wx, int wy, int wcolor);

int getcolor (void);

void setnewcolor (int wcolor);

};

26. Скрытие данных и общий интерфейс.

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

private (закрытый) – члены класса определяются только внутри класса и вне его использоваться не могут

public (открытый) – члены класса определены как для членов класса, так и вне его

protected (защищённый) – члены класса определены для членов класса, его потомков и друзей (подробнее в вопросе о наследовании)

class <имя класса>

{

private:

<объявления>

public:

<объявления>

protected:

<объявления>

};

Закрытый член доступен только функциям-членам и друзьям класса. Класс, который хочет скрыть информацию, объявляет свои данные-члены закрытыми.

Защищенный член ведет себя как открытый по отношению к производному классу (его потомкам и друзьям) и как закрытый по отношению к остальной части программы.

Согласно принятому соглашению, сначала объявляются открытые члены класса. (в старых программах C++ сначала шли закрытые члены и этот стиль еще кое-где сохранился). В теле класса может быть несколько секций public, protected и private. Каждая секция продолжается либо до метки следующей секции, либо до закрывающей фигурной скобки. Если спецификатор доступа не указан, то секция, непосредственно следующая за открывающей скобкой, по умолчанию считается private.

Интерфейс – открытая часть класса, один из аспектов объекта, абстрактный класс. Это контракт, который обязуется выполнить класс, выполняющий его, а с другой стороны – тип данных, задающий внешнее поведение объектов, внутреннюю структуру и реализацию которого обеспечивает класс.

Один класс может определять несколько интерфейсов.

Интерфейс - смысловая и синтаксическая конструкция в коде программы, используемая для специфицирования услуг, предоставляемых классом или компонентом. Интерфейс определяет границу взаимодействия между классами или компонентами, специфицируя определенную абстракцию, которую осуществляет реализующая сторона. В отличие от многих других видов интерфейсов, интерфейс в ООП является строго формализованным элементом объектно-ориентированного языка и в качестве смысловой конструкции широко используется кодом программы.

В C++ интерфейсов, строго говоря, нет вообще. Механизм, аналогичный интерфейсам (и исторически предшествующий им) реализуется другими средствами чрезвычайно мощной объектной подсистемы этого языка.

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

Интерфейс реализуется через наследование. Благодаря наличию множественного наследования, ничто не мешает реализовать в одном классе несколько интерфейсов, если в этом есть необходимость (подробнее об этом в вопросах о наследовании и множественном наследовании).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]