课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
面向对象编程开发是目前大多数软件开发程序员都需要熟练掌握的一个编程方法,而本文我们就通过案例分析来简单了解一下,面向对象编程数据模型与派生分享。
面向对象的数据模型:Java、C#、Eiffel
编程主要做的事情之一是为现实世界建模,流行的做法是提供原生的语法支持面向对象编程:对数据作结构化的分组,使用类方法操作那些数据结构。
Python本身是经过精心设计的,无需先编写自己的类就可以使用面向对象的特性。并不是每种语言都采用这种方法——本小节中列出的语言都认为学习面向对象设计是使用该语言的必要条件。
C#在许多方面与Java相似,在Sun和微软未能解决他们关于微软的Java实现(即J++)的业务差异之后,C#成为了一种替代方案。像Java一样,这是一门开发商用程序的流行语言,还有其它一些语言共享着.NETCLR(公共语言运行时),包括Python的IronPython实现(早的IronPython1.0的核心组件被提取成了与语言无关的.NET动态语言运行库)。在很长一段时间里,.NET是一种专用于Windows的技术,而mono作为一种跨平台的开源实现,但微软在2015年初转向了开源生态系统战略。
与此清单中的大多数语言不同,我不推荐在日常工作中使用Eiffel。但是,我依然推荐学习它,因为它教会了我许多关于良好的面向对象设计的知识,比如它认为“可验证的正确性”是应用程序的设计目标。(学习Eiffel也让我明白了为什么“可验证的正确性”并不是大多数软件开发时的设计目标,因为可验证的正确软件实在不能很好地处理模糊性,并且完全不适用于那些你不清晰相关的约束条件却需要给自己留下足够的回旋余地,以便能够通过迭代开发找出更具体的细节的情况。)
学习这些语言,你可以深入了解继承模型、契约式设计、类不变性(classinvariant)、前置条件、后置条件、协方差、逆变、类方法解析顺序、泛型编程以及其它适用于Python类型系统的概念。还有很多标准库模块和三方框架使用这种“看得见的面向对象”的设计风格,比如unittest和logging模块,以及Django框架中基于类的视图。
面向对象的C派生:C++、D
CPython运行环境可以被视为一个“带有对象的C”的编程环境——在其核心,CPython使用C的方法实现面向对象编程,即定义C结构体来保存相关的数据,并将结构体的实例作为一个参数传递给函数,然后对数据进行操作(这就是CPythonCAPI中全能的PyObject*指针)。这种设计模式对应到Python层面,就是实例方法的显式self参数以及类方法的显式cls参数。
C++的目标是保持与C语言源代码的完全兼容,同时添加更高级的特性,例如支持原生的面向对象编程和基于模板的元编程。它是出了名的冗长和难以编程(尽管2011年对语言标准的更新解决了许多糟糕的问题),但它也是许多领域的编程选,包括3D建模的图形化引擎和跨平台应用的开发框架(例如Qt)。
D语言也很有趣,因为它与C++的关系类似于Rust与C的关系:它的目标是保留C++的大多数令人满意的特性,同时也避免它的许多问题(如缺乏内存安全)。不像Rust,D不是一种从头开始设计的新编程语言——恰恰相反,D是C++的衍生物,虽然它不像C++一样是一个严格的C超集,但它遵循着一个设计原则,即任何落入C和D的共同子集的代码,在两种语言中必须要表现一致。
学习这些语言,你可以更深入地了解将高级语言的特性与底层C运行时模型相结合的复杂性。学习C++,在Python中操作用C++编写的库和工具包时,也可能会有帮助。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei456学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。