Исследование принципов объектно-ориентированного программирования

Разработка программы, основанной на идее наследования классов, основные принципы объектно-ориентированного программирования. Реализация наследования посредством написания программы на языке С++. Разработка программы с использованием абстрактного класса.

Рубрика Программирование, компьютеры и кибернетика
Вид отчет по практике
Язык русский
Дата добавления 18.02.2019
Размер файла 73,0 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Омский государственный университет путей сообщения

(ОмГУПС (ОмИИТ))

Отчет

по учебно-лабораторному практикуму

Д.В. Рыбалкина

Омск 2017

Оглавление

1. Разработка программы, основанной на идее наследования классов

2. Разработка программы с использованием абстрактного класса

3. Разработка программы с использованием множественного наследования

Библиографический список

Приложение

1. Разработка программы, основанной на наследовании классов

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

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

В ходе работы был реализован базовый класс Human, имеющий следующие поля:

class Human

{

public:

int year; //год рождения

char name[20]; //имя

char middlename[20]; //отчество

char lastname[20]; //фамилия

char registration[30]; //место регистрации

char gender[1]; //пол

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

void Name() //функция ввода поля "имя"

{

cout << "Введите имя:";

cin >> name;

}

void Middlename() //функция ввода поля "отчество"

{

cout << "Введите отчество:";

cin >> middlename;

}

void Lastname() //функция ввода поля "фамилия"

{

cout << "Введите фамилию:";

cin >>lastname;

}

void Registration() //функция ввода поля "место регистрации"

{

cout << "Введите город, в котором зарегестрированы:";

cin >> registration;

}

void Gender() //функция ввода поля "пол"

{

cout << "Введите пол:";

cin >> gender;

}

void Year() //функция ввода поля "год рождения"

{

cout << "Введите год рождения:";

cin >> year;

}

void All() //функция вывода всех полей

{

cout <<endl<< "Резюме" << endl;

cout << "Имя: " << name << endl;

cout << "Отчество: "<<middlename<<endl;

cout << "Фамилия: "<<lastname<<endl;

cout << "Место регистрации: "<<registration<<endl;

cout << "Пол: "<<gender<<endl;

cout << "Год рождения: " << year<<endl;

}

Класс Ballerina наследует класс Human, в разделе public объявляются следующие поля:

class Ballerina:public Human //наследование

{

public:

int age; //возраст

int weight; //вес

int height; //рост

int experience; //опыт работы, вводимый пользователем

int myexperience; //опыт работы, задаваемый по умолчанию

int idealw; //идеальный вес

Согласно заданию, реализуем методы, конструкторы и деструктор класса Ballerina:

Ballerina() //конструктор по умолчанию

{

age = 0;

weight = 0;

height = 0;

experience = 0;

}

void Data() //функция ввода пользователем запрашиваемых полей

{

cout << endl << "Дополнительные данные" << endl;

cout << "Ваш вес:";

cin >> weight;

cout << "Ваш рост:";

cin >> height;

cout << "Опыт работы в данной сфере:";

cin >> experience;

}

Ballerina(int e) //конструктор с одним параметром

{

myexperience = e;

}

void Countage() //функция вычисления поля "возраст"

{

age = 2017 - year;

}

void Printage() //функция вывода поля "возраст"

{

cout << endl << "Ваш возраст:" << age << endl;

}

void Results(int idealw) //функция проверки условия и вывода результата

{

idealw = height - 122;

cout << "При Вашем росте идеальный вес для балерины <в кг> составляет " << weight << endl;

if (age >= 18 && experience >= myexperience && weight <= idealw)

cout << "Вы нам подходите!" << endl;

else

cout << "Вы нам не подходите" << endl;

}

~Ballerina() //деструктор

Вызов методов классов в теле имеет следующий вид:

int _tmain(int argc, _TCHAR* argv[])

{

setlocale(LC_ALL, "rus");

Ballerina d(6); //объявление переменной типа Ballerina

d.Name(); //вызов функции Name

d.Middlename(); //вызов функции Middlename

d.Lastname(); //вызов функции Lastname

d.Registration(); //вызов функции Registration

d.Gender(); //вызов функции Gender

d.Year(); //вызов функции Year

d.All(); //вызов функции All

d.Data(); //вызов функции Data

d.Countage(); //вызов функции Countage

d.Printage(); //вызов функции Printage

d.Results(); //вызов функции Results

while (1);

}

Результаты работы программы приведены в Приложении.

2. Разработка программы, основанной понятии абстрактного класса и виртуального метода

Цель работы: изучение понятий абстрактного класса и виртуального метода, применение полученных знаний при написании программы на языке С++.

Абстрактный класс - базовый класс, который не предполагает создания экземпляров. Абстрактные классы реализуют на практике один из принципов ООП - полиморфизм. Класс считается абстрактным, если в нем реализован хотя бы один абстрактный метод. Абстрактный метод не реализуется для класса, в котором описан, однако должен быть реализован для его неабстрактных наследуемых классов. Абстрактный метод имеет вид: virtual тип_метода имя_метода(список_аргументов) = 0.

В ходе работы был создан абстрактный класс Human, в нем объявлена виртуальная функция Print():

class Human

{

public:

virtual void Print() = 0; //виртуальная функция Print()

};

Класс Ballerina наследует класс Human, объявляем методы класса:

class Ballerina:public Human //наследование

public:

int height; //рост

int weight; //вес

int idealweight; //идеальный вес

Ballerina() //конструктор по умолчанию

{

height = 0;

weight = 0;

}

Ballerina(int h, int w) //конструктор с двумя параметрами

{

height = h;

weight = w;

}

void Print() //виртуальная функция Print()

{

cout << "Введите вес:";

cin >> weight;

cout << "Введите рост:";

cin >> height;

idealweight = height - 122;

cout << "Идеальный вес (в кг) для балерины с таким ростом составит " << idealweight << endl;

if (weight <= idealweight)

cout << "Проверка на проф.пригодность пройдена" << endl;

else

cout << "Проверка на проф. пригодность не пройдена" << endl; };

Класс Driver наследует класс Human, объявляем методы класса:

class Driver:public Human //наследование

public

float price; //цена

float distance; //расстояние

float middlecharge; //средний расход топлива

float cost; //стоимость

float gas; //количество топлива

Driver() //конструктор по умолчанию

{

price = 0;

distance = 0;

middlecharge = 0;

}

void Print() //виртуальная функция Print()

{

cout << "Количество километров:";

cin >> distance;

cout << "Средний расход топлива на 100 км:";

cin >> middlecharge;

cout << "Стоимость 1л топлива:";

cin >> price;

gas = distance*middlecharge / 100;

cost = gas*price;

cout << "Потребуется топлива (в л):" << gas << endl;

cout << "Cтоимость топлива составит (в руб):" << cost << endl; }

объектный ориентированный программирование

Вызов виртуальной функции в теле имеет следующий вид:

int _tmain(int argc, _TCHAR* argv[])

{

setlocale(LC_ALL, "rus");

bool choice; //объявление переменной типа bool

Human* mas[2]; //массив указателей типа Human

mas[0] = new Driver; //заполнение массива объектами наследуемых классов

mas[1] = new Ballerina;

cout << "Выберите профессию (Driver=0;Ballerina=1):";

cin >> choice;

if (choice == 0)

{

mas[0]->Print(); //вызов виртуальной функции Print() класса Driver

}

else if (choice == 1)

{

mas[1]->Print(); //вызов виртуальной функции Print() класса Ballerina

}

while (1);

}

Результаты работы программы приведены в Приложении.

3. Разработка программы, основанной на идее множественного наследования

Цель работы: изучение понятия множественного наследования и применение этих знаний при написании программы на языке С++.

Множественное наследование - наследование от нескольких базовых классов одновременно. Множественное наследование позволяет наследуемому классу перенимать функциональность и данные у всех базовых классов. Для порождения класса из нескольких базовых после имени наследуемого класса и двоеточия указывают модификаторы и имена базовых классов, разделяя их запятыми: class наследуемый_класс: public базовый_класс1, public базовый_класс2.

В ходе работы был реализован класс Truck, имеющий следующие поля и методы:

class Truck //класс Грузовой автомобиль

{

public:

int capacity; //грузоподъемность

float lenght; //длина кузова

float widht; //ширина кузова

Truck() //конструктор по умолчанию

{

capacity = 20;

lenght = 13.6;

widht = 2.46;

}

void truck() //функция вывода полей соответствующего класса

{

cout << "Грузоподъемность <в т>:до " << capacity << endl;

cout << "Длина кузова <в м>:" << lenght << endl;

cout << "Ширина кузова <в м>:" << widht << endl;

}

};

Далее был создан класс Passangercar:

class Passangercar //класс Пассажирский автомобиль

{

public:

float weight; //масса автомобиля

int seats; //количество сидений

int speed; //скорость автомобиля

Passangercar() //конструктор по умолчанию

{

weight = 3.5;

seats = 4;

speed = 330;

};

void passangercar() //функция вывода полей соответствующего класса

{

cout << "Масса <в т>:" << weight << endl;

cout << "Количество сидений:" << seats << endl;

cout << "Скорость <км/ч>:до" << speed << endl; } };

Класс Pickup наследует поля и методы и от класса Truck, и от класса Passangercar:

class Pickup:public Truck, public Passangercar //класс Pickup, множественное наследование

{

public:

void pickup() //функция вывода полей наследуемого класса

{

cout << "Технические характеристики пикапа" << endl;

truck(); //вызов функции класса Truck

passangercar(); //вызов функции класса Passangercar } };

Вызов класса Pickup в теле имеет следующий вид:

int main()

{

setlocale(LC_ALL, "rus");

Pickup c; //объявление переменной типа Pickup

c.pickup(); //вызов функции класса Pickup

while (1);

}

Результаты работы программы приведены в Приложении.

Список литературы

1. Фридман, А.Л. Язык программирования С++ /М: Интуит, 2016, 218 с.

2. Петелин А.Е., Шумилов Б.М. Введение в объектно-ориентированное программирование /М: Том. гос. архит.-строит. ун-т, 2013, 32 с.

3. Лафоре, Р. Объектно-ориентированное программирование в С++/М:Питер,2013,928 с.

4. https://ru.wikipedia.org/wiki/Абстрактный_класс

Приложение

Код программы для первого задания имеет следующий вид:

class Human

{

public:

int year; //год рождения

char name[20]; //имя

char middlename[20]; //отчество

char lastname[20]; //фамилия

char registration[30]; //место регистрации

char gender[1]; //пол

void Name() //функция ввода поля "имя"

{

cout << "Введите имя:";

cin >> name;

}

void Middlename() //функция ввода поля "отчество"

{

cout << "Введите отчество:";

cin >> middlename;

}

void Lastname() //функция ввода поля "фамилия"

{

cout << "Введите фамилию:";

cin >>lastname;

}

void Registration() //функция ввода поля "место регистрации"

{

cout << "Введите город, в котором зарегестрированы:";

cin >> registration;

}

void Gender() //функция ввода поля "пол"

{

cout << "Введите пол:";

cin >> gender;

}

void Year() //функция ввода поля "год рождения"

{

cout << "Введите год рождения:";

cin >> year;

}

void All() //функция вывода всех полей

{

cout <<endl<< "Резюме" << endl;

cout << "Имя: " << name << endl;

cout << "Отчество: "<<middlename<<endl;

cout << "Фамилия: "<<lastname<<endl;

cout << "Место регистрации: "<<registration<<endl;

cout << "Пол: "<<gender<<endl;

cout << "Год рождения: " << year<<endl;

}

class Ballerina:public Human //наследование

{

public:

int age; //возраст

int weight; //вес

int height; //рост

int experience; //опыт работы, вводимый пользователем

int myexperience; //опыт работы, задаваемый по умолчанию

int idealw; //идеальный вес

Ballerina() //конструктор по умолчанию

{

age = 0;

weight = 0;

height = 0;

experience = 0;

}

void Data() //функция ввода пользователем запрашиваемых полей

{

cout << endl << "Дополнительные данные" << endl;

cout << "Ваш вес:";

cin >> weight;

cout << "Ваш рост:";

cin >> height;

cout << "Опыт работы в данной сфере:";

cin >> experience;

}

Ballerina(int e) //конструктор с одним параметром

{

myexperience = e;

}

void Countage() //функция вычисления поля "возраст"

{

age = 2017 - year;

}

void Printage() //функция вывода поля "возраст"

{

cout << endl << "Ваш возраст:" << age << endl;

}

void Results(int idealw) //функция проверки условия и вывода результата

{

idealw = height - 122;

cout << "При Вашем росте идеальный вес для балерины <в кг> составляет " << weight << endl;

if (age >= 18 && experience >= myexperience && weight <= idealw)

cout << "Вы нам подходите!" << endl;

else

cout << "Вы нам не подходите" << endl;

}

~Ballerina() //деструктор

};

int _tmain(int argc, _TCHAR* argv[])

{

setlocale(LC_ALL, "rus");

Ballerina d(6); //объявление переменной типа Ballerina

d.Name(); //вызов функции Name

d.Middlename(); //вызов функции Middlename

d.Lastname(); //вызов функции Lastname

d.Registration(); //вызов функции Registration

d.Gender(); //вызов функции Gender

d.Year(); //вызов функции Year

d.All(); //вызов функции All

d.Data(); //вызов функции Data

d.Countage(); //вызов функции Countage

d.Printage(); //вызов функции Printage

d.Results(); //вызов функции Results

while (1);

};

Результаты работы программы приведены на рисунке 1 и рисунке 2

Рисунок 1 - результат работы программы

Рисунок 2 - результат работы программы

Код программы для второго задания имеет следующий вид:

#include "stdafx.h" //подключение стандартных библиотек

#include"locale.h"

#include"iostream"

using namespace std;

class Human

{

public:

virtual void Print() = 0; //виртуальная функция };

class Ballerina:public Human //класс Ballerina наследует класс Human

{

public: //объявление переменных данного класса

int height; //рост

int weight; //вес

int idealweight; //идеальный вес

Ballerina() //конструктор по умолчанию

{

height = 0;

weight = 0;

}

Ballerina(int h, int w) //конструктор с двумя параметрами

{

height = h;

weight = w;

}

void Print() //реализация виртуальной функции Print()

{

cout << "Введите вес:";

cin >> weight;

cout << "Введите рост:";

cin >> height;

idealweight = height - 122;

cout << "Идеальный вес (в кг) для балерины с таким ростом составит " << idealweight << endl;

if (weight <= idealweight)

cout << "Проверка на проф.пригодность пройдена" << endl;

else

cout << "Проверка на проф. пригодность не пройдена" << endl;

}

};

class Driver:public Human //класс Driver наследует класс Human

{

public: //объявление переменных данного класса

float price; //цена

float distance; //расстояние

float middlecharge; //средний расход топлива

float cost; //стоимость

float gas; //количество топлива

Driver() //конструктор по умолчанию

{

price = 0;

distance = 0;

middlecharge = 0;

}

void Print() //реализация виртуального метода Print()

{

cout << "Количество километров:";

cin >> distance;

cout << "Средний расход топлива на 100 км:";

cin >> middlecharge;

cout << "Стоимость 1л топлива:";

cin >> price;

gas = distance*middlecharge / 100;

cost = gas*price;

cout << "Потребуется топлива (в л):" << gas << endl;

cout << "Cтоимость топлива составит (в руб):" << cost << endl; } };

int _tmain(int argc, _TCHAR* argv[])

{

setlocale(LC_ALL, "rus");

bool choice; //объявление переменной типа bool

Human* mas[2]; //массив указателей типа Human

mas[0] = new Driver; //заполнение массива объектами наследуемых классов

mas[1] = new Ballerina;

cout << "Выберите профессию (Driver=0;Ballerina=1):";

cin >> choice;

if (choice == 0)

{

mas[0]->Print(); //выполнение виртуальной функции Print() класса Driver

}

else if (choice == 1)

{

mas[1]->Print(); //выполнение виртуальной функции Print() класса Ballerina

}

while (1);

}

Результаты работы программы приведены на рисунке 3 и рисунке 4

Рисунок 3 - результат работы программы

Рисунок 4 - результат работы программы

Код программы для третьего задания имеет следующий вид:

#include "stdafx.h"

#include<iostream>

using namespace std;

class Truck //класс Грузовой автомобиль

{

public:

int capacity; //грузоподъемность

float lenght; //длина кузова

float widht; //ширина кузова

Truck() //конструктор по умолчанию

{

capacity = 20;

lenght = 13.6;

widht = 2.46;

}

void truck() //функция вывода полей соответствующего класса

{

cout << "Грузоподъемность <в т>:до " << capacity << endl;

cout << "Длина кузова <в м>:" << lenght << endl;

cout << "Ширина кузова <в м>:" << widht << endl;

}

};

class Passangercar //класс Пассажирский автомобиль

{

public:

float weight; //масса автомобиля

int seats; //количество сидений

int speed; //скорость автомобиля

Passangercar() //конструктор по умолчанию

{

weight = 3.5;

seats = 4;

speed = 330;

};

void passangercar() //функция вывода полей соответствующего класса

{

cout << "Масса <в т>:" << weight << endl;

cout << "Количество сидений:" << seats << endl;

cout << "Скорость <км/ч>:до" << speed << endl;

}

};

class Pickup:public Truck, public Passangercar //класс Pickup наследует и от класса Truck, и от класа Passangercar

{

public:

void pickup() //функция вывода полей наследуемого класса

{

cout << "Технические характеристики пикапа" << endl;

truck(); //вызов функции класса Truck

passangercar(); //вызов функции класса Passangercar } };

int main()

{

setlocale(LC_ALL, "rus");

Pickup c; //объявление переменной типа Pickup

c.pickup(); //вызов функции класса Pickup

while (1);

}

Результаты работы программы приведены на рисунке 5

Рисунок 5 - результат работы программы

Размещено на Allbest.ru

...

Подобные документы

  • Общая характеристика объектно-ориентированного подхода в программировании, его основные свойства и принципы. Разработка программы для автоматизация деятельности кафе на основе объектно-ориентированного подхода, проектирования и реализации схемы данных.

    курсовая работа [1,2 M], добавлен 22.01.2012

  • Исследование принципов объектно-ориентированного программирования на базе языка программирования С++. Разработка программного комплекса для ведения учёта памятников города. Описание процессов сортировки, поиска, формирования статистики по памятникам.

    курсовая работа [782,4 K], добавлен 26.05.2014

  • Разработка программы с использованием принципов объектно-ориентированного программирования на языке высокого уровня С средствами Microsoft Visual Studio 2010. Построение алгоритма реализации. Класс программы, инструкция по использованию программы.

    курсовая работа [1,0 M], добавлен 26.12.2013

  • Понятие объектно-ориентированного программирования, характеристика используемых языков. Практическая разработка средств объектно-ориентированного программирования в задачах защиты информации: программная реализация на языке С++, а также Turbo Pascal.

    курсовая работа [275,9 K], добавлен 22.12.2011

  • Характеристика основных принципов объектно-ориентированного программирования. Этапы разработки программы на языке C++, реализующей игру "Морской бой". Выбор языка программирования. Характеристика необходимых классов, наследований, виртуальных методов.

    курсовая работа [657,6 K], добавлен 17.06.2012

  • Применение объектно-ориентированного программирования для написания нескольких модулей программы. Вычисление алгебраического уравнения методом половинного деления. Применение метода Эйлера в теории численных методов общих дифференциальных уравнений.

    курсовая работа [398,1 K], добавлен 26.02.2015

  • Изучение базовых понятий объектно-ориентированного программирования. Исследование принципов работы с классами и объектами. Построение системы классов для описания плоских геометрических фигур. Анализ методов создания объектов, перемещения на плоскости.

    лабораторная работа [212,0 K], добавлен 10.03.2013

  • Анализ объектно-ориентированного программирования, имитирующего способы выполнения предметов. Основные принципы объектно-ориентированного программирования: инкапсуляция, наследование, полиморфизм. Понятие классов, полей, методов, сообщений, событий.

    контрольная работа [51,7 K], добавлен 22.01.2013

  • Особенности разработки приложений для операционной системы с помощью императивного, структурированного, объектно-ориентированного языка программирования Delphi. Формальное начало программы. Выделение конца программного блока. Листинг и описание программы.

    курсовая работа [1,2 M], добавлен 04.08.2014

  • Создание программы с использованием принципов объектно-ориентированного программирования на языке высокого уровня С# средствами Microsoft Visual Studio 2010. Построение алгоритма реализации. Определение математического аппарата, применение его в задаче.

    курсовая работа [500,4 K], добавлен 13.01.2015

  • Использование объектно-ориентированного программирования - хорошее решение при разработке крупных программных проектов. Объект и класс как основа объектно-ориентированного языка. Понятие объектно-ориентированных языков. Языки и программное окружение.

    контрольная работа [60,1 K], добавлен 17.01.2011

  • Разработка приложения "Калькулятор с переходом в строковый калькулятор" с применением объектно-ориентированного программирования. Концепция и понятия объектно-ориентированного программирования. Язык программирования Java. Листинг программы "Калькулятор".

    курсовая работа [966,9 K], добавлен 11.02.2016

  • Разработка программы логической игры в "крестики-нолики" пять в ряд на поле размера 15х15 клеток с применением графики на языке Pascal с использованием объектно-ориентированного программирования. Структура алгоритма программы и описание ее работы.

    курсовая работа [821,5 K], добавлен 13.02.2012

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

    курсовая работа [2,3 M], добавлен 10.05.2015

  • Разработка обучающей программы на языке программирования Borland C++ Bilder 6.0 с использованием объектно-ориентированного подхода. Особенности алгоритмической и логической реализации выполняемых системой операций. Основные формы программы и ее функции.

    курсовая работа [3,5 M], добавлен 12.03.2013

  • Разработка программы для рисования различных правильных многоугольников с помощью объектно-ориентированного языка программирования. Использование для разработки среды C++ Builder 6 и библиотеки VCL. Разработка интерфейса приложения и алгоритма его работы.

    курсовая работа [616,4 K], добавлен 18.10.2010

  • Создание программы, реализующей игру "Линии". Среда разработки программы, описание ее общего вида. Основные алгоритмы программы. Реализация программы в среде разработки Microsoft Visual Studio 2008 на языке объектно-ориентированного программирования С++.

    курсовая работа [639,0 K], добавлен 16.03.2012

  • Основные понятия объектно-ориентированного программирования в PHP5. Структурный и объектно-ориентированный подход. Класс как абстрактный тип. Реализация класса. Конструкторы и деструкторы. Функция l_visited_style изменение стиля посещенных ссылок.

    курсовая работа [433,2 K], добавлен 13.06.2008

  • Приемы и правила объектно-ориентированного программирования с использованием языка С++. Общие принципы разработки объектно-ориентированных программ. Основные конструкции языка С++. Разработка различных программ для Windows с использованием WIN32 API.

    учебное пособие [1,6 M], добавлен 28.12.2013

  • Особенности создания программы "Файловый менеджер" в среде объектно-ориентированного программирования Delphi. Назначение и основные функции программы, формулировка задачи. Описание программы, использованные компоненты, интерфейс и порядок применения.

    контрольная работа [1,3 M], добавлен 19.06.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.