Файл: Основные понятия объектно-ориентированного программирования (Этапы объектно-ориентированного).pdf
Добавлен: 28.03.2023
Просмотров: 472
Скачиваний: 3
СОДЕРЖАНИЕ
1.1 ЭТАПЫ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОЕКТИРОВАНИЯ ПРОГРАММНЫХ КОМПЛЕКСОВ
1.2 ИНСТРУМЕНТАЛЬНЫЕ СРЕДСТВА ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОЕКТИРОВАНИЯ
1.2.1 ГРАФИЧЕСКИЕ МОДЕЛИ БЛОК СХЕМЫ
1.3 ЭТАПЫ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ
1.3.1 ОБЪЕКТНО-ОРИЕНТИРОВАННЫЙ ПОДХОД
В проектной части КР было спроектировано и разработано программное средство для моделирования работы лифта, а также проведен эксперимент с его использованием. Написано руководство пользователя.
В ходе разработки использовался объектно-ориентированный подход. Это привело к сокращению времени разработки и повысило качество программного решения. Разработанная программа подходит как строительным фирмам, так и компаниям, которые занимаются проектированием подъемных устройств и предоставляет проектным организациям эффективное решение под различные задачи. Данная программа имеет ряд возможностей для её адаптации к реальным проблемам, стоящим перед предприятиями, которые занимаются проектированием и разработкой лифто-подъемного оборудования.
Тема КР является актуальной. Моделирование работы лифта позволяет определить множество параметров для наладки оптимальной работы подъемников в различных строениях. К примеру, разработанная программа позволяет рассчитать пассажирооборот за нужный промежуток времени, а при проектировании зданий – определить, имеется ли необходимость в дополнительном лифте, настроить оптимальную скорость лифта и т.п. Программа позволяет исключить дополнительные расходы, связанные с переналадками лифтового оборудования. У данного программного средства есть множество способов для улучшения, например, добавление различных параметров, в частности, добавление возможности регулировать очереди пассажиров, увеличение числа лифтов, масштабирование в облачный ресурс для быстрого доступа к программе через интернет и др.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
- Харви Д. Как программировать на C++ [Текст] / Харви Д, Пол Д – М.: ООО «Бином-Пресс», 2008. - 1456 с.
- Труб И. Объектно-ориентированное моделирование на C++ [Текст] –СПБ: Питер, 2006. - 411 с.
- Ларман К. Применение UML 2.0 и шаблонов проектирования. [Текст] — М.: ООО “И.Д. Вильямс”, 2013. — 736 с.
- Лешек А. Анализ и проектирование информационны
- х систем с помощью UML 2.0 [Текст] — М: ООО “И.Д. Вильямс”, 2008. — 816 с.
- Вирт Н. Алгоритмы и структуры данных [Текст] – М.: ДМК Пресс, 2010. – 272 с.
- Фаулер M. UML. Основы [Текст] – СПб.: Символ-Плюс, 2004. – 192 с.
- Гома Х. UML. Проектирование систем реального времени, параллельных и распределительных приложений. [Текст] – М.: ДМК Пресс, 2011. – 704 с.
- Арлоу Д.UML 2 и Унифицированный процесс. Практический объектно-ориентированный анализ и проектирование. [Текст] – СПб.: Символ-Плюс, 2007. – 624 с.
- Страуструп Б. Программирование: принципы и практика с использованием С++. [Текст]- М.: ООО "И.Д. Вильяме", 2016. - 1328 с.
- Зиборов В. MS Visual C++ 2010 в среде .NET. Библиотека программиста. [Текст] — СПб.: Питер, 2012. — 320 с.
- Лафоре Р. Объектно-ориентированное программирование в С++. [Текст] - СПБ.: Питер, 2006. - 924 с.
- Прата C. Язык программирования C++. Лекции и упражнения. [Текст] — М.: ООО "И.Д. Вильяме", 2012. - 1248 с.
- Назаров С.В. Архитектура и проектирование программных систем [Текст] – М.: НИЦ Инфра-М, 2013. – 351 с.
- Брукс Ф. Проектирование процесса проектирования. Записки компьютерного эксперта [Текст] - М.: Вильямс, 2013. – 464 с.
- Культин Н. C/C++ в задачах и примерах [Текст] - СПБ.: БХВ-Петербург, 2009. — 351 с.
- Кёнинг Э. Эффективное программирование С++ [Текст] - М.: Издательский дом «Вильямс», 2002. – 386 с.
- Сидорина Т. Самоучитель Microsoft Visual Studio C++ и MFC [Текст] - СПБ.: БХВ-Петербург, 2009. — 848 с.
- Макконнелл С. Совершенный код. [Текст] - М.: Русская редакция, 2005. – 889 с.
- Стенли Л. Язык программирования С++ [Текст] - М.: Издательский дом «Вильямс», 2007. – 890 с.
- Годштейн С. Оптимизация приложений на платформе .NET [Текст] – М.: ДМК Пресс, 2014. – 524 с.
- Тепляков С. Паттерны проектирования на платформе .NET [Текст] - М.: Издательский дом «Вильямс», 2016. – 320 с.
- Вайсфельд М. Объектно-ориентированное мышление [Текст] –СПБ: Питер, 2014. - 304 с.
- Генри С. Алгоритмические трюки для программистов [Текст] - М.: Издательский дом «Вильямс», 2016. – 512 с.
- Клейнберг Дж. Алгоритмы: разработка и применение. [Текст] –СПБ: Питер, 2016. - 800 с.
- Колдаев В. Основы алгоритмизации и программирования [Текст] – М: ИД «ФОРУМ», 2006. - 416с.
- Шилд Г. Полный справочник по C++ [Текст] - М.: Издательский дом «Вильямс», 2006. – 791 с.
- Мейерс С. Эффективный и современный С++ [Текст] - М.: Издательский дом «Вильямс», 2016. – 306 с.
- Хортон А. Visual C++ 2010 Полный Курс. [Текст] — М.: Издательский дом «Вильямс», 2011. - 1216 с.
- Потопахин В. Современное программирование с нуля [Текст] – М.: ДМК Пресс, 2010. – 242 с.
- Вернон В. Реализация методов предметно-ориентированного проектирования. [Текст] — М.: Издательский дом «Вильямс», 2015. - 688 с.
- Эспозито Д. Microsoft .NET. Архитектура корпоративных приложений. [Текст] — М.: Издательский дом «Вильямс», 2015. - 432 с.
- Джейсон С. Элементарные шаблоны проектирования. [Текст] — М.: Издательский дом «Вильямс», 2013. - 533 с.
- Гради Б. Объектно-ориентированный анализ и проектирование с примерами приложений. [Текст] — М.: Издательский дом «Вильямс», 2008. - 721 с.
- Бабич А.В. Введение в UML [Текст] — М.: НОУ ИНТУИТ, 2016. - 209 c.
- Мацяшек Л.А. Анализ и проектирование информационных систем с помощью UML 2.0 [Текст] — М.: Издательский дом «Вильямс», 2008. - 816 с.
- Новиков Ф.А. Моделирование на UML: теория, практика [Текст] — СПб.: Профессиональная литература, 2010. — 640 с.
- Леоненков А. Объектно-ориентированный анализ и проектирование с использованием UML и IBM Rational Rose [Текст] — М.: НОУ ИНТУИТ, 2006. - 209 c.
- Йордон Э. Объектно-ориентированный анализ и проектирование систем [Текст] — М.: Лори, 2014. - 264 c.
- Кормен Т. Алгоритмы. Построение и анализ [Текст] — М.: Издательский дом «Вильямс», 2015. - 1368 с.
- Скиена С. Алгоритмы. Руководство по разработке [Текст] - СПБ.: БХВ-Петербург, 2011. — 720 с.
ПРИЛОЖЕНИЕ А
Листинг класса button.
#pragma once
// подключение заголовочных файлов
#include <windows.h>
#include <iostream>
using namespace std; //объявление пространства имен std
// класс button
class button {
public:
bool status; // нажата ли кнопка
button(bool p) { status = p; } // конструктор класса
void showstatus(int fl) {
// функция для отображения состояния кнопки в лифте
if (status == true) {// если кнопка нажата
cout << " Кнопка " << fl << " этажа включена" << endl; // вывод результата в консоли
}
else {// если не нажата
cout << " Кнопка " << fl << " этажа выключена" << endl;// вывод результата в консоли
}
}
void setstatus(bool p, int fl) {
// функция для задания состояния кнопки в лифте
status = p; // установка статуса кнопки
showstatus(fl); // вывод положение кнопки
}
void showstatusfloor(int fl) {
// функция для отображения состояния кнопки на этаже
if (status == true) { // если кнопка нажата
cout << " Кнопка вызова лифта включена на " << fl << " этаже" << endl;// вывод результата в консоли
}
else { // если кнопка не нажата
cout << " Кнопка вызова лифта выключена на " << fl << " этаже" << endl;// вывод результата в консоли
}
}
void setstatusfloor(bool p, int fl) {
// функция для задания состояния кнопки на этаже
status = p; // установка статуса кнопки
showstatusfloor(fl); // вывод положение кнопки
}
};
ПРИЛОЖЕНИЕ Б
Листинг класса man.
#pragma once
// подключение заголовочных файлов
#include <windows.h>
#include <iostream>
using namespace std; //объявление пространства имен std
// класс man
class man {
public:
int pos; // этаж пассажира
bool enter;// позиция пассажиры
// man() { }
man(int p) { pos = p; }// конструктор класса
void print() {
// функция для отображения информации о положении пассажира
cout << " Человек на " << pos << " этаже" << endl; // вывод результата в консоли
}
void pressButton() {
// функция для отображения информации о нажатии кнопки лифта
cout << " Пассажир нажал на кнопку" << endl; // вывод результата в консоли
}
void enterToElevator() {
// функция для отображения информации о входе пассажира в лифт
cout << " Человек входит в лифт " << endl;// вывод результата в консоли
enter = true; // пассажир внутри лифта
}
void exitToElevator() {
// функция для отображения информации о выходе пассажира из лифта
cout << " Человек выходит из лифта " << endl;// вывод результата в консоли
enter = false; // пассажир вышел лифта
}
};
ПРИЛОЖЕНИЕ В
Листинг класса elevator.
#pragma once
// подключение заголовочных файлов
#include <windows.h>
#include <iostream>
#include "button.h"
#include <string>
//#include "Toform.h"
using namespace std; //объявление пространства имен std
// класс elevator
class elevator {
public:
button bt; // переменная класса button
int door, floor; // переменная состояния дверей лифта, переменная положения лифта
elevator(int p, int p1, bool p3) :bt(p3) { door = p; floor = p1; } //конструктор класса
void up() {
// функция для поднятия лифта
floor++;// прибавляем этаж
cout << "\n Лифт поднимается на " << floor << " этаж" << endl; // вывод информации в консоли
}
void down() {
// функция для спуска лифта
floor--;//отнимаем этаж
cout << "\n Лифт спускается на " << floor << " этаж" << endl; // вывод информации в консоли
}
void Opendoor() {
// функция для открытия дверей лифта
door++; // открываем дверь
cout << "\n Лифт открывает двери" << endl;// вывод информации в консоли
}
void Closedoor() {
// функция для закрытия дверей лифта
door--; // закрываем дверь
cout << "\n Лифт закрывает двери" << endl; // вывод информации в консоли
}
void setButtonElevator(int p, bool set) {
/// функция для задания состояния кнопки в лифте
bt.setstatus(set, p);
}
void elevatorcall(int tofloor) {
// функция для вызова лифта к пассажиру
if (tofloor == floor) {
// Если нужный этаж равен этажу с лифтом
Opendoor(); // открываем двери
}
else if (tofloor > floor) {// если нужный этаж выше этажа с лифтом
while (tofloor != floor) { // поднимаем лифт, пока этажи не будут равными
up();
}
Opendoor();// открываем двери
}
else if (tofloor < floor)
{// если нужный этаж ниже этажа с лифтом
while (tofloor != floor) {// опускаем лифт, пока этажи не будут равными
down();
}
Opendoor();// открываем двери
}
}
void enterfloorButton(int p) {
// функция для передвижения лифта к заданному этажу пассажиром
if (p == floor) { // если пассажир и лифт на одном этаже
setButtonElevator(p, true);// включение кнопки
Sleep(3000); // пауза на 3 секунды
setButtonElevator(p, false);//выключение кнопки
}
else if (p < floor) { // если пассажир ниже лифта
setButtonElevator(p, true); // включение кнопки
Closedoor(); // закрытие дверей
while (p != floor) { /// опускаем лифт, пока этажи не будут равными
down();
}
Opendoor(); // открытие двери
setButtonElevator(p, false); //выключение двери
}
else if (p > floor) { // если пассажир выше лифта
setButtonElevator(p, true); // включение кнопки
Closedoor(); // закрытие дверей
while (p != floor) {// поднимаем лифт, пока этажи не будут равными
up();
}
Opendoor();// открытие дверей
setButtonElevator(p, false); // выключение кнопки
}
}
void showstatus(int fl) { bt.showstatus(fl); } // функция для отображения состояния кнопки в лифте
void setstatus(bool p, int fl) { bt.setstatus(p, fl); } // функция для задания состояния кнопки в лифте
};
ПРИЛОЖЕНИЕ Г
Листинг класса MyForm.
#pragma once
// подключение заголовочных файлов
#include <windows.h>
#include <iostream>
#include <string>
#include <time.h>
#include "button.h"
#include "elevator.h"
#include "man.h"
using namespace std; //объявление пространства имен std
// пространство имен lift
namespace Lift {
// объявление пространства имен
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
/// <summary>
/// Сводка для MyForm
/// </summary>
// класс формы Myform
public ref class MyForm : public System::Windows::Forms::Form
{
public: // объявление видимых переменных в классе
int MainNumberFloor, MainNumberPassenger;
int PassengerTime, ButtonTime, LiftTime, DoorTime;
public:
// конструктор класса
MyForm(void)
{
InitializeComponent(); // инициализирует все компоненты, расположенные на форме
this->SetStyle(ControlStyles::SupportsTransparentBackColor, true);
}
protected:
/// <summary>
/// Освободить все используемые ресурсы.
/// </summary>
//деструктор класса
~MyForm()
{//удаление компонентов, если они есть
if (components)
{
delete components;
}
}
// объявление компонентов формы
private: System::Windows::Forms::PictureBox^ pictureBox14;
private: System::Windows::Forms::PictureBox^ pictureBox15;
private: System::Windows::Forms::Label^ label6;
private: System::Windows::Forms::Label^ label7;
private: System::Windows::Forms::GroupBox^ groupBox1;
private: System::Windows::Forms::TextBox^ textBox6;
private: System::Windows::Forms::Label^ label11;
private: System::Windows::Forms::TextBox^ textBox5;
private: System::Windows::Forms::Label^ label10;
private: System::Windows::Forms::TextBox^ textBox4;
private: System::Windows::Forms::Label^ label9;
private: System::Windows::Forms::TextBox^ textBox3;
private: System::Windows::Forms::Label^ label8;
private: System::Windows::Forms::PictureBox^ pictureBox13;
private: System::Windows::Forms::Button^ button1;
private: System::ComponentModel::BackgroundWorker^ backgroundWorker1;
private: System::Windows::Forms::PictureBox^ pictureBox1;
private: System::Windows::Forms::PictureBox^ pictureBox2;
private: System::Windows::Forms::PictureBox^ pictureBox3;
private: System::Windows::Forms::Label^ label1;
private: System::Windows::Forms::Label^ label2;
private: System::Windows::Forms::TextBox^ textBox1;
private: System::Windows::Forms::Label^ label3;
private: System::Windows::Forms::PictureBox^ pictureBox4;
private: System::Windows::Forms::PictureBox^ pictureBox5;
private: System::Windows::Forms::PictureBox^ pictureBox6;
private: System::Windows::Forms::PictureBox^ pictureBox7;
private: System::Windows::Forms::PictureBox^ pictureBox8;
private: System::Windows::Forms::Label^ label4;
private: System::Windows::Forms::PictureBox^ pictureBox9;
private: System::Windows::Forms::PictureBox^ pictureBox10;
private: System::Windows::Forms::PictureBox^ pictureBox11;
private: System::Windows::Forms::PictureBox^ pictureBox12;
private: System::Windows::Forms::Label^ label5;
private: System::Windows::Forms::TextBox^ textBox2;
protected:
private:
/// <summary>
/// Обязательная переменная конструктора.
/// </summary>
System::ComponentModel::Container ^components;
#pragma region Windows Form Designer generated code
/// <summary>
/// Требуемый метод для поддержки конструктора — не изменяйте
/// содержимое этого метода с помощью редактора кода.
/// </summary>
// метод инциализации компонентов
void InitializeComponent(void)
{
System::ComponentModel::ComponentResourceManager^ resources = (gcnew System::ComponentModel::ComponentResourceManager(MyForm::typeid));
this->button1 = (gcnew System::Windows::Forms::Button());
this->backgroundWorker1 = (gcnew System::ComponentModel::BackgroundWorker());
this->pictureBox1 = (gcnew System::Windows::Forms::PictureBox());
this->pictureBox2 = (gcnew System::Windows::Forms::PictureBox());
this->pictureBox3 = (gcnew System::Windows::Forms::PictureBox());
this->label1 = (gcnew System::Windows::Forms::Label());
this->label2 = (gcnew System::Windows::Forms::Label());
this->textBox1 = (gcnew System::Windows::Forms::TextBox());
this->label3 = (gcnew System::Windows::Forms::Label());
this->pictureBox4 = (gcnew System::Windows::Forms::PictureBox());
this->pictureBox5 = (gcnew System::Windows::Forms::PictureBox());
this->pictureBox6 = (gcnew System::Windows::Forms::PictureBox());
this->pictureBox7 = (gcnew System::Windows::Forms::PictureBox());
this->pictureBox8 = (gcnew System::Windows::Forms::PictureBox());
this->label4 = (gcnew System::Windows::Forms::Label());
this->pictureBox9 = (gcnew System::Windows::Forms::PictureBox());
this->pictureBox10 = (gcnew System::Windows::Forms::PictureBox());
this->pictureBox11 = (gcnew System::Windows::Forms::PictureBox());
this->pictureBox12 = (gcnew System::Windows::Forms::PictureBox());
this->label5 = (gcnew System::Windows::Forms::Label());
this->textBox2 = (gcnew System::Windows::Forms::TextBox());
this->pictureBox13 = (gcnew System::Windows::Forms::PictureBox());
this->pictureBox14 = (gcnew System::Windows::Forms::PictureBox());
this->pictureBox15 = (gcnew System::Windows::Forms::PictureBox());
this->label6 = (gcnew System::Windows::Forms::Label());
this->label7 = (gcnew System::Windows::Forms::Label());
this->groupBox1 = (gcnew System::Windows::Forms::GroupBox());
this->textBox6 = (gcnew System::Windows::Forms::TextBox());
this->label11 = (gcnew System::Windows::Forms::Label());
this->textBox5 = (gcnew System::Windows::Forms::TextBox());
this->label10 = (gcnew System::Windows::Forms::Label());
this->textBox4 = (gcnew System::Windows::Forms::TextBox());
this->label9 = (gcnew System::Windows::Forms::Label());
this->textBox3 = (gcnew System::Windows::Forms::TextBox());
this->label8 = (gcnew System::Windows::Forms::Label());
(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->pictureBox1))->BeginInit();
(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->pictureBox2))->BeginInit();
(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->pictureBox3))->BeginInit();
(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->pictureBox4))->BeginInit();
(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->pictureBox5))->BeginInit();
(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->pictureBox6))->BeginInit();
(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->pictureBox7))->BeginInit();
(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->pictureBox8))->BeginInit();
(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->pictureBox9))->BeginInit();
(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->pictureBox10))->BeginInit();
(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->pictureBox11))->BeginInit();
(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->pictureBox12))->BeginInit();
(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->pictureBox13))->BeginInit();