非面向对象更关注功能,它将一个大的问题细分成很多小功能,每个功能就表现为一个函数,通过函数之间的相互连接,完成问题的求解。使用这种功能分解方式编程会出现一个问题:当需求发生改变时,必须要修改某个函数或模块,模块的变化同时会引起其他依赖该模块的程序的正常运行,因此带来了程序不易维护和扩展的缺点。
面向对象编程用对象封装解决了上面的问题。利用面向对象的基本特征,并灵活使用设计模式,能给程序带来良好的可复用性、可扩展性以及可维护性。
面向对象有4个主要特征,它们是区分非面向对象编程的主要标志。
抽象:抽象包括数据抽象和过程抽象。面向过程式编程,不是把过程与数据看成一个整体,只是把客体的行为抽取出来,如果属性有变更,需要更改很多地方。而面向对象编程将数据与过程做个一个整体,并形成对象。每个对象都有自己有自己的状态,并能够根据自身当前状态完成相应的功能。
封装:非面向对象编程将数据与功能函数分离,在C语言中数据采用结构体方式表示,其成员变量都默认public的。面向对象采用类作为封装,其中包含了属性和方法,且都可以用public,protected,friendly,private四种不同的访问权限修饰,达到了数据隐藏的效果,提高了软件的可靠性和可维护性。
继承:在非面向对象编程中没有继承的概念。面向对象中的继承增加了软件的可复用性和可扩展性。
多态:多态依托于继承。把通用功能放在较高层次,具体实现放在较低层次,低层次的对象能对通用消息作出个性的响应。增强程序的可扩展性和可维护性。