- •Рейтингова система оцінювання знань та умінь з ооп 2012-2013 н.Р.
- •Вимоги до звіту з лабораторних робіт
- •Класи потоків Лабораторна робота 1
- •1.1 Теоретичні відомості
- •1.1.1. Методи класів потоків
- •1.1.2. Маніпулятори
- •1.1.3. Деякі методи класів файлових потоків
- •1.2 Приклад програми Умова задачі
- •Алгоритм задачі
- •Текст програми
- •Результати виконання програми
- •1.3 Варіанти завдань
- •1.4 Контрольні запитання
- •Інкапсуляція. Інтерфейси класів . Діаграми прецедентів і класів Лабораторна робота 2
- •2.1 Теоретичні відомості Етапи об’єктно-орієнтованого проектування та моделювання
- •Діаграма варіантів використання(use-case diagram)
- •Ідентифікація класів
- •Ідентифікація атрибутів
- •Ідентифікація операцій (методів)
- •Типові схеми uml діаграм
- •2.2 Програма роботи
- •2.3 Варіанти завдань
- •2.4 Приклад виконання роботи Задача
- •Об’єктно-орієнтоване проектування Зображення класів в uml
- •Ідентифікація атрибутів
- •Структура проекту
- •Інтерфейси та реалізації класів програми
- •2.5 Контрольні запитання
- •Конструктори та деструктори класів Діаграми прецедентів і класів Лабораторна робота 3
- •3.1 Теоретичні відомості
- •3.2 Програма роботи
- •3.3 Варіанти завдань
- •3.4 Приклад виконання роботи Задача
- •Реалізація конструкторів і деструкторів деяких класів
- •3.5 Контрольні запитання
- •Методи класів: аксесори, ітератори, утілити, предикатні функції . Діаграми класів, діяльності, послідовності Лабораторна робота № 4
- •4.1 Теоретичні відомості
- •4.2 Програма роботи
- •4.3 Варіанти завдань
- •4.4 Приклад виконання роботи Задача
- •Реалізація деяких методів-аксесорів, предикатних функцій, функцій-утілит, методів, які забезпечують функціональність об’єктів
- •Результати виконання роботи
- •4.5 Контрольні запитання
- •Константні та статичні члени класів. Вбудовані функції. Діаграми класів, послідовності Лабораторна робота № 5
- •5.1 Теоретичні відомості
- •5.2 Програма роботи
- •5.3 Варіанти завдань
- •5.4 Приклад виконання роботи Задача 5_1
- •Приклади деяких константних елементів даних і методів класів
- •Фрагмент результатів виконання роботи
- •Задача 5_2
- •Приклади деяких статичних елементів даних і методів класів
- •Фрагмент результатів виконання роботи
- •5.5 Контрольні запитання
- •Перевантаження операцій та функцій. Дружні функції Діаграми класів, станів і переходів Лабораторна робота 6
- •6.1 Теоретичні відомості
- •6.2 Програма роботи
- •6.3 Варіанти завдань
- •6.4 Приклад виконання роботи
- •6.5 Контрольні запитання
- •Просте успадкування класів. Поліморфізм. Віртуальні функції Діаграма класів, кооперацій. Лабораторна робота 7
- •7.1 Теоретичні відомості
- •7.2 Програма роботи
- •9.2. Приклад програми Умова задачі 9
- •Алгоритм задачі 9
- •Текст програми 9
- •Результати роботи програми 9
- •9.3. Варіанти завдань
- •9.4. Контрольні запитання
- •Методи внутрішнього сортування (сортування масивів) Лабораторна робота 10
- •Методи зовнішнього сортування (сортування файлів) Лабораторна робота 11
4.3 Варіанти завдань
Дивись варіанти завдань з лабораторної роботи 3
4.4 Приклад виконання роботи Задача
Умову задачі дивись у лаб роб 3
Відкриті (public) методи-аксесори забезпечують прямий доступ до змінних класу. Як правило функції типу get() повертають значення змінних класу, а функції типу set() встановлюють певні значення змінних. Найчастіше функції типу set() викликаються у конструкторах класу.
Відкриті предикатні функції визначають стан об’єктів, який позначається хибністю чи істинностю певних умов. Наприклад, визначити стан кнопки (натиснута чи не натиснута) можна функцією, яка повертає значення типу bool. В нашому прикладі в класи включені функції, наприклад, Floor::IsOccupied() для встановлення факту зайнятості ліфта чи появи пасажира на поверху, FloorButton::PressButton() для визначення факту натиснення кнопки тощо.
Функції-утілити завжди є закритими членами класу. Вони викликаються у відкритих функціях-членах класу і призначені для спрощення обробки розрахунків для об’єктів класу. Функції-утілити є методами внутрішнього інтерфейсу. Їх слід приховувати від клієнтів класу, оскільки вони не призначені для спілкування з об’єктом. Відкриті функції класу желегують свої функціональні обов’язки закритим функціям-утілитам. Делегування функціональності означуєьбся викликами функцій-утілит в тілі відкритою функції класу. Наприклад, в клас Scheduler включені закриті функції: ScheduleTime() для планування прибуття ліфта на поверх, CreateNewPerson() для створення нового пасажира, HandleArrivals() для управління прибуттям пасажира на поверх тощо. Усі ці функції викликаються в тілі функції ProcessTime().
Методи, що віддзеркалюють функціональність об’єкта, тобто моделюють сам процес його діяльності, є відкритими функціями.
Реалізація деяких методів-аксесорів, предикатних функцій, функцій-утілит, методів, які забезпечують функціональність об’єктів
// building.h // Definition for class Building. #ifndef BUILDING_H #define BUILDING_H #include "elevator.h" #include "floor.h" #include "clock.h" #include "scheduler.h" class Building { public: Building(); // constructor Building(Building&); //copy constructor ~Building(); // destructor // run simulation for specified time void RunSimulation( int ); Elevator& GetElevator();
private: Floor floor1; // floor1 object Floor floor2; // floor2 object Elevator elevator; // elevator object Clock clock; // clock object Scheduler scheduler;//scheduler object }; #endif // BUILDING_H |
// building.cpp // Member function for class Building. #include <iostream> using namespace std; #include "building.h" Building::Building() // constructor : floor1(1 , elevator ), floor2(2 , elevator ), elevator( floor1, floor2 ), scheduler( floor1, floor2 ) { cout << "building created" << endl; } //copy constructor Building::Building(Building& object) :floor1(1 , object.elevator ), floor2(2 , object.elevator ), elevator( object.floor1, object.floor2 ), scheduler( object.floor1, object.floor2 ) {cout << "second building created" << endl;} Building::~Building() // destructor { cout << "building destroyed" << endl; }
//method-accessor Elevator& Building:: GetElevator() { return elevator;}
// functional method - control the simu//lation - void Building::RunSimulation(int totalTime){ int currentTime = 0; while ( currentTime < totalTime ) { clock.tick(); currentTime = clock.GetTime(); cout<<"TIME: "<<currentTime<<endl; scheduler.ProcessTime(currentTime); cin.get(); // stop pouput to screen } } |
// clock.h // Definition for class Clock. #ifndef CLOCK_H #define CLOCK_H class Clock { public: Clock(); // constructor ~Clock(); // destructor void tick();//increment clock by second int GetTime(); //returns current time private: int time; // clock's time }; #endif // CLOCK_H |
// clock.cpp // Member function of class Clock. #include <iostream> using namespace std; #include "clock.h" Clock::Clock() // constructor : time( 0 ) { } Clock::~Clock(){ } // destructor //functional method - increment time void Clock::tick() { time++; } //method-accessor int Clock::GetTime()//return current time { return time; } |
// scheduler.h // defintion for class Scheduler #ifndef SCHEDULER_H #define SCHEDULER_H class Floor; // forward declaration class Scheduler { public: Scheduler( Floor &, Floor & ); ~Scheduler(); void ProcessTime( int ); private: //утілита–планувальник прибуття на поверх void ScheduleTime(Floor & ); //утілита–затримка часу до появи пасажира void DelayTime( Floor & ); //утілита-створення нового пасажира void CreateNewPerson( Floor & ); /*утілита-управління прибуття м пасажира на поверх*/ void HandleArrivals( Floor &, int ); Floor &floor1Ref; Floor &floor2Ref;
// lab5: added attributes int currentClockTime; //поточний час int floor1ArrivalTime; //час прибуття //на поверх 1 int floor2ArrivalTime; //час прибуття }; //на поверх 2 #endif // SCHEDULER_H
|
// scheduler.cpp //implementation of class Scheduler #include <iostream> using namespace std; #include <cstdlib> #include <ctime> #include "scheduler.h" #include "floor.h" #include "person.h" // constructor for lab5 is modified Scheduler::Scheduler( Floor &firstFloor, Floor &secondFloor ) : floor1Ref( firstFloor ) , floor2Ref( secondFloor ) , currentClockTime(0) //added for lab5 { // added for lab5 srand(time(0));//random number generator cout << "scheduler created" << endl; // schedule first arrivals for floors ScheduleTime( floor1Ref ); ScheduleTime( floor2Ref ); } //lab5: метод-утілита для планування //прибуття ліфта на поверх void Scheduler::ScheduleTime(Floor &floor) { int floorNumber = floor.GetNumber(); int arrivalTime = currentClockTime+(5+rand()%16); floorNumber == 1 ? floor1ArrivalTime = arrivalTime : floor2ArrivalTime = arrivalTime; cout<<"schedules next person for floor" <<floorNumber<<" at time "<<arrivalTime << endl; }
// lab5: метод, який делегує свої //повноваження утілитам void Scheduler::ProcessTime( int time ){ currentClockTime=time;//поточний час // прибуття на поверх 1 HandleArrivals(floor1Ref,currentClockTime ); // прибуття на поверх 2 HandleArrivals(floor2Ref,currentClockTime ); } // lab5: утілита void Scheduler::HandleArrivals( Floor &floor, int time ){ int floorNumber = floor.GetNumber(); int arrivalTime=(floorNumber == 1 ) ? floor1ArrivalTime: floor2ArrivalTime; } |
// floor.cpp // implementation of class Floor. #include <iostream> using namespace std; #include "floor.h" #include "person.h" #include "elevator.h" // constructor Floor::Floor(int number, Elevator &elevatorHandle ) : floorButton( number, elevatorHandle ), floorNumber( number ), elevatorRef( elevatorHandle ), occupantPtr ( 0 ), light(floorNumber==1?"floor 1":"floor 2") { cout << "floor "<<floorNumber<<" created"<< endl; }
Floor::~Floor() // destructor { cout << "floor " << floorNumber << " destroyed" << endl; } // метод предикатний (lab5) bool Floor::IsOccupied() { return ( occupantPtr != 0 );}
// метод-аксесор (lab5) int Floor::GetNumber() { return floorNumber; } // метод-аксесор (lab5) Person *Floor::elevatorArrived() { return occupantPtr;}
// pass person to floor void Floor::PersonArrives( Person* personPtr ){ } // tell floor that elevator is leaving void Floor::ElevatorLeaving() { } // notifies floor that person is leaving void Floor::PersonBoardingElevator() { } |
// elevatorSimulation.cpp // Driver for the simulation. #include <iostream> using namespace std; #include <string> #include "building.h" #include "person.h"
void main(){ int duration; //length of simulation cout << "Enter run time: "; cin >> duration; cin.ignore(); // ignore return char Building office1;//create the building Person man; //default constructor string code; cout<<"enter string code for man"<<endl; cin>>code; Person one(code); //constructor-//transformation: string to 3*int cout<<endl<<"*** ELEVATOR SIMULATION BEGINS ***" <<endl<<endl; Person manager(1); //copy constructor Building office2=office1; //copy constructor Elevator elevator2=office2.GetElevator(); //copy constructor Person clerk=manager; cout<<" in new office"<<endl; office1.RunSimulation( duration ); // start simulation cout<<"*** ELEVATOR SIMULATION ENDS ***" << endl; system("pause"); }
|
Повний код дивись на сервері