2018面对对象_作业二

C语言实现的流程图

C++面向对象实现的类图


C过程流程与C++对象类图区别:
首先,二者思考的问题一致——如何规划电梯调度,使得乘客需求满足的情况下,运行时间最短。
在这种前提条件下,面对过程与面对对象所存在的区别,我认为有如下几点(仅为个人见解,如有错误欢迎指正):
一、编码区别:
1、面对过程主张解决问题,主要面对怎么调度,函数均为全局函数。
2、面对对象主张针对电梯编码,除了面对怎么调度,还提倡调度什么,即考虑完乘客需求后,对于电梯的各项属性进行一定的规划来解决问题。
通俗来讲,我认为的最明显的区别——头文件自我编写与否、function( elevator lift ) versus lifi.funciton()
二、思考方式区别:
1、面对过程不会考虑属性值的私有,会造成一些不愿看到的结果。(一些不希望被访问的东西可以被肆意访问)
2、面对对象显然做好了对于属性值的保护,如若不想被访问的对象完全可以做到独自占用。

PS:谈及面对过程和面对对象,我还很想说一门语言——Pascal,不敢说多么了解,但是也曾经写过一段不短的时间,在学习Pascal的时候,完全属于面对过程编程(并没有贬低面过程的意思),发现很多东西确实用面对过程实现不妥,或者说是少了一种直面所编写事物的体验(比如编写汽车改装,modifycar( car mycar) versus mycar.modify,我个人感觉第二种更有改装汽车的感觉在)

电梯类:


#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <vector>
#include <queue>
#include <cmath>
using namespace std;

class Passenger
{};

class Elevator
{
	public:
				int CurDirection;
				int CurFloor, CurTime;
				
				Elevator();
				~Elevator();
				void Run( int tofloor );		//reach onefloor and do something 
				void Print( int curtime, int curfloor );	 
				void Show( int curtime, int curfloor );	//show curtime and curfloor 
				
	private:
				int SumTime, SumPeople;
				//sum of time for all passengers
				//the number of people in the lift
				
				queue<Passenger> DestQueue;		
				//the information of passenger in the lift
				
				void Scan();		
				//find out CurTime and CurFloor should stop or not, if stop then Print
};


Elevator:: Elevator()
{
	CurDirection = 1;
	CurTime = CurFloor = Sumtime = SumPeolpe = 0; 
}

Elevator:: ~Elevator()
{
	while ( !DestQueue.empty() ) DestQueue.pop();
}

void Elevator:: Run( int tofloor )
{
	CurTime += fabs( CurFloor - tofloor );
	CurFloor = tofloor;
	SumPeople ++;
}

void Elevator::Show( int curtime, int curfloor )
{
	cout << "now status:" << curtime << "(time)" << curfloor << "(floor)" << endl;
}

总结:其实写过了挺久的面对过程,最近(寒假至今)又接触到了面对对象,才懂得了“封装、继承、多态”的巧妙,也更觉得二者真的是相辅相成。面对对象的编写中,不可能缺少面对过程(如何解决问题的过程),但是,面对对象又多了几重保护,多了一些概念,从而使得相对于开发项目而言,面对对象比面对过程更为合适与合理。此外,我还想多谈一点就是,当一个调度程序写出来后,应当考量其的泛化功能,因为当下我们编写的程序并不具有学习能力,无法从已测试中的样例中学习进步,所以泛化的功能完全取决于我们编写时的思路实现,所以很容易出现欠拟合与过拟合的情况,即有些乘客该接没接,有些乘客不该接接了,于是乎编写程序时的判断,预剪枝就显得非常重要。个人感觉,我自己电梯的决策确实是不怎么优的,也有很多情况没有考虑,希望今后能不断进步。

原文地址:https://www.cnblogs.com/FormerAutumn/p/8984889.html