• 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;
    }
    
    

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

  • 相关阅读:
    Intellij 常用技巧-持续更新
    Android界面组件的四种启动方式
    Preference Screen 首选项
    Oracle OCI-22053:溢出错误
    SQLPLUS使用
    Oracle中数字格式的文本化处理
    MP4V2 移植 (基于imx6 平台)
    IMX6Q camera 应用编程之 摄像头裁剪
    IMX6Q camera驱动分析 (4)
    IMX6Q Camera驱动分析 (3)
  • 原文地址:https://www.cnblogs.com/FormerAutumn/p/8984889.html
Copyright © 2020-2023  润新知