- 面向对象和面向过程的区别?
如果说面向对象和面向过程的具体区别,最深入的地方应该是去看设计模式,推荐大话设计模式那本书,讲的比较好。本人只不过简单叙述下,重点是如何进行面向对象和面向过程的编程,只有会编程了,才能真正懂得面向对象和面向过程的区别。否则都是纸上谈兵。
面向过程:是以计算机线性思维的方式进行编程。一步一个脚印的执行。本身也没有问题,但是如果遇到需求多变的情况,或者功能的添加和删除,将极其影响原来的程序代码,必须要重写或者修改,或者重新组织原来的代码。
面向对象:在对需求多变的时候,不影响整体程序的代码,必要时,可以扩增,不会影响程序的主要逻辑,尤其后期加上优秀的设计模式,将大大适应需求多变,易扩展等大量问题。因此广受欢迎,以面向对象语言层出不穷,经典的有C++,JAVA,以及现在比较热门的Python,甚至大数据编程还有Scala编程(结合了函数式编程和面向对象编程)。
- 面向对象如何编程,面向过程如何编程?
具体的举个小例子,约瑟夫问题(一群小孩围成一个环,对其进行编号,然后到几了就删除了这个小孩,然后从下一个小孩从1进行编号,不断地删除)
面向过程如何编程:首先写好孩子的数据结构,孩子本身的信息+孩子的下一个指针(该指针存储了下一个结点的地址)。另外结点写好了,在讲这些有关系的结点进行组装起来成为一个没有头结点的循环链表,自然而然就有buildCycLink(int len,头指针)方法 。然后再写一个printLink(头指针)方法,最后在main函数中一个一个调用方法,很线性的思维方式。(本例有个重点,就是结点和结点之间有关系,你必须要组装,例如构建二叉树,也是如此,多个结点需要组装成二叉树。)面向对象如何进行编程:首先造出一个孩子类(孩子本身的信息,+指向下一个结点(引用)),然后组装这些结点之间的关系,那么自然而然拥有这些结点数据信息。(面向对象一个很重要的思想就是谁拥有数据信息,就拥有可以操作这些数据信息的方法)。所以在造出个CycLink类,这个类里面包含了数据结点,以及结点个数,以及构建结点关系的方法和显示结点信息的方法。
注意事项:c++中是用指针表示结点之间的关系:p->next=q; (表示的p的下个结点是q)。p=q,(表示的是p和q指向的同一个结点)。Java中:对象p.next属性=对象q;(表
示的是对象p的下一个对象是q)对象p=对象q(表示的两者引用的是同一个东西)。
3.面向对象编程的总体思路
首先是抽象:将共同的事物进行抽象成类,或者数据结构,这点和数据结构结点的的抽象是一样的。
以KNN算法为例,很多点,需要抽象成点类,点和点需要计算距离,这时候可以抽象成距离类。未知分类点和训练集点,进行校验,那么面向对象就需要拥有这些训练集数据和未知点数据,那么自然而然就拥有了操作这些数据的方法,欧式计算,mostOfType()等等方法。这样就可以写成一个类,别的类只需要负责调用这个类实现功能。
4.面向对象的MVC模式启发
界面层:干界面层的事情。
模型层:负责具体业务逻辑
控制层:负责控制判断,跳转。
每一层:拥有每一层的数据,自然而然的就拥有操作这些数据的方法,其他层负责调用就好了。