`
rysh0818
  • 浏览: 23832 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

面向对象编程的一些思考

 
阅读更多

这段时间一直都在学习python,主要目的还是打算学习一门互联网的编程语言,为后续的职业生涯做一些规划,毕竟java在互联网除了电商领域有叫广泛的使用场景之外,在互联网其他领域还不是很普及,并且java太重量级了。而python在相对来说轻量级并且易于使用,很适合互联网产品快速迭代开发方式。

个人之前接触的唯一一个纯面向对象编程语言就是java,以至于很长一段时间内,我都以为面向对象编程的模型应该都是以java这样为基础的,直到看了javasript和python等以函数式编程为主,支持面向对象编程的语言,才更深的了解面向对象的编程本质。

什么是对象,对于对象的理解,我感觉就是具有某些特性的物质,比如说狗。而面向对象编程最大的特点就是 把 对象的属性和它相关的行为进行封装,比如狗的品种就是狗的属性,但是狗叫就是狗的行为。我们把这两个特性封装到一个具体的对象里面,就构成了面向对象的编程的基础。如果把对象的属性称作数据,对象的行为成为函数,那么数据就构成了对象的状态,同一个对象中的数据可以有很多不同的版本,数据是变化的,函数是不变的,只不过这个函数就是属于这个对象的。

但是对象的行为一定非要和对象绑定吗?是不是可以脱离对象而独立存在了。比如我们说狗叫,那么叫这个动作,一定非要和狗绑定吗,是不是也可以和人绑定的?还有就是比较两个数的大小,这个行为的对象是谁 ? 通过这些思考我们发现,很多时候行为和可以独立对象独立存在的,这些独立存在的行为不属于任何对象,或者我们并不需要关心他属于谁,只需要关注他的目的是什么即可。

以上两个问题在java里面都反映的比较明显,static关键字用来表明这个行为不和任何对象绑定,比如public static void main ,这个main方法就不属于定义它的class所对应的对象。还有java里面的Math类,这个类里面的方法都是public static的,说明这些方法都不属于任何对象。而java是纯面向对象的,只能把这些不属于任何具体对象的定义为static,而其对应的class类,感觉给他定义了一个命名空间而已。

python中的面向对象的设计感觉比java要复杂,但是通过和java面向对象的设计相比,能够让你更深入的了解面向对象编程的核心。python中 class如果定义对对象的行为,第一个参数比如为self。当初自己对这个设计理解很不理解,为什么弄的这么复杂,后来想想面向对象思想是什么,突然就明白了,这个self就是数据,方法就是行为,这个行为要和某个对象绑定,只不过java里面帮助我们省去了这个过程,通过创建对象的语法new XXXClass 自动进行绑定。java是静态的,一旦方法和数据进行绑定,这个绑定关系就不会发生改变,但是python绑定关系就可以进行改变。如果方法参数中没有self,那么这个方法就和java里面的static方法类似,表示这个方法属于某一个类,不属于某个对象。

而javascript面向对象设计就是更有意思了,构造函数本身就是一个function,通过function.apply方法和具体的对象进行绑定,在javascript中用this来表示function所绑定的对象。

而在scala中,对象的方法和class 对应的static方法就完全分开了。更确切的说,class对应的static方法,就不属于这个class,所以scala定义了object 这个概念。所有class中定义的方法都属于对象的行为,而之前java中所有class static方法,都属于object。两者在语法上都已经明确区分了。个人感觉这个明显比java,python,javascript 对static方法的支持简洁明了的多。

对于面向对象的设计,不同的语言虽然不同,但是其核心思想还是相似的。但是由于编程语言所支持的编程范式不一样,实现方式差别还是比较大的。通过学习多范式编程语言,能够加深对这种编程范式的理解。

--ps,这里发一个消息:有兴趣来成都支付宝(java)的同学,站内联系我

分享到:
评论

相关推荐

    java面向对象编程课后思考题答案

    以上是Java面向对象编程的一些基本概念,通过解决孙卫琴女士教程中的课后思考题,学习者可以更好地理解和应用这些知识。解答集"answer"应详细阐述了这些问题的解题思路和实现方法,对于深入学习和复习Java面向对象...

    面向对象编程思想

    面向对象编程思想 ...面向对象编程思想是一种新兴的程序设计方法,它可以提高软件的重用性和可维护性,提高软件的开发效率和质量。它已经成为当前计算机界关心的重点,并且在软件开发领域中有着广泛的应用前景。

    完成Java面向对象程序设计实验课的心得体会

    在Java面向对象程序设计实验课的学习过程中,我深入体验了Java语言的强大特性和它在软件开发中的重要地位。Java作为一种面向对象的语言,它的核心概念包括抽象、封装、继承和多态,这些特性使得Java在软件工程中具有...

    面向对象的思考过程(英文版).zip

    面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它基于“对象”的概念,将数据和操作数据的方法封装在一起。在OOP中,对象是类的实例,类则是对象的模板或蓝图。这个压缩包文件《面向对象的...

    写给大家看的面向对象编程书(第3版).pdf

    《写给大家看的面向对象编程书(第3版)》是一部独具特色的面向对象技术著作。书中结合代码示例生动透彻地讲述了面向对象思想的精髓,让读者真正学会以对象方式进行思考。此外,《写给大家看的面向对象编程书(第3版)》...

    《Java面向对象编程》思考题及答案PDF

    这些知识点是《Java面向对象编程》一书的核心内容,通过阅读书中的思考题及答案,可以帮助读者巩固理论知识,提升实际编程能力。对于初学者来说,理解并熟练运用这些概念是掌握Java编程的关键步骤。

    JAVA面向对象编程(孙卫琴)01

    2. 书中内容经过作者的深刻思考,这意味着书中不仅有浅显易懂的入门知识,也包含了作者对于面向对象编程深刻理解的阐述,对学习者构建正确开发思想有很大帮助。 3. 该书强调了通过简单示例来体会JAVA的面向对象开发...

    C++面向对象程序设计教材(谭浩强编著)习题程序+教材例题程序

    总的来说,《C++面向对象程序设计》是一本值得学习者深入研究的教材,结合书中习题和例题,不仅可以掌握C++的基本语法,还能领略到面向对象编程的魅力。通过不断练习和思考,学习者可以成长为熟练的C++开发者,具备...

    面向对象编程思想问题和答案

    面对面向对象编程,我们需要思考的问题包括: 1. 如何合理地设计类和对象,以达到最佳的数据抽象和封装? 2. 如何选择合适的继承结构,以支持代码的扩展和复用? 3. 在什么情况下应该使用多态,以及如何利用多态...

    面向对象程序设计-课件

    C++ 是一种支持面向对象编程(OOP)的多范式语言,由Bjarne Stroustrup于1983年在C语言的基础上发展起来,提供类、继承、封装、多态等核心特性,使得程序员能够以更加抽象的方式思考问题并构建复杂的系统。...

    JAVA面向对象编程(孙卫琴)08.pdf

    1. Java面向对象编程:面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,依赖于对象的概念来设计应用程序。在面向对象编程中,数据和方法被封装成一个单一的单元,即对象。这些对象通过发送...

    戏说面向对象程序设计之C#版

    戏说面向对象程序设计之C#版的书籍内容涉及了面向对象编程的基础知识以及设计模式的应用。设计模式是一套被反复使用、多数人知晓、经过分类编目、代码设计经验的总结,使用设计模式是为了可重用代码、让代码更容易被...

    《C_面向对象程序设计》课程设计

    《C#面向对象程序设计》课程设计是一门旨在深化学生对面向对象编程理解,并通过实践提升C#编程技能的课程。课程设计的目标是使学生在理解面向对象的基本概念和原则后,能用C#语言有效地编写程序。在这个过程中,学生...

    面向对象程序设计语言C++第2版资源

    这个压缩包“面向对象程序设计语言C++第2版资源”包含了学习和理解C++的全面资料,特别是对于那些希望通过实践来加深对面向对象编程理解的人来说,这是一个宝贵的资源。 首先,C++是一种静态类型的、编译式的、通用...

    OOAD面向对象编程

    2. **代码复用**:通过继承和封装,面向对象编程促进了代码的重用,降低了开发成本,提高了生产效率。 3. **易于维护**:由于对象的独立性和封装性,系统的修改和升级更加容易,因为更改通常仅限于受影响的模块。 4....

    《C++面向对象程序设计》样章

    学习《C++面向对象程序设计》这本书,读者将能够理解并运用面向对象编程的基本原理,编写出更加高效、模块化的C++程序。书中深入浅出的讲解和实例演示将有助于初学者和有经验的程序员 alike 提升他们的C++技能。

Global site tag (gtag.js) - Google Analytics