几种面向对象语言的设计

本文探讨了不同面向对象编程语言的特点,包括Java, JavaScript, Scala, PHP, Python和Go。文章通过多继承、封装、多态和闭包的实现来展示每种语言的特性,如JavaScript中的闭包,Java的多继承实现,Python的接口和抽象类,以及Go语言的并发和通道。同时,提到了在不同语言中如何模拟多继承和接口实现。" 121992073,9099581,Ubuntu下PostgreSQL的apt-get安装与源码编译,"['postgresql', 'ubuntu', '服务器']
摘要由CSDN通过智能技术生成

 

面向对象

Java是支持面向对象编程的语言,java设计思想参考java之父James Gosling的一次谈话 http://www.artima.com/intv/gosling1P.html。设计简单,易于理解,多用于开发Internet

应用软件。90年代的许多软件开发思想得益于Smalltalk语言。

本文试图从多继承、封装、多态、闭包的实现来说明几种语言面向对象编程的特点。包括:不同访问权限,如私有、公有;类属性(静态)与对象属性(只属于每个对象);接口、抽象方法;常量、变量。如果你是某种语言的专家,请指正。

动态语言?

作用域

类与对象

JavaScript

var声明为当前作用域,否则为全局。

静态类型通过语言内置原型prototype字段,隐式支持。包括构造器constructor

动作方法只支持封装function,json可作为数据类型封装。

ECMA6支持class

规范:接口的实现通过巧妙的编程设计来实现。JS的设计非常简单,可读性和功能很强大

Python

__ 下划线声明为私有字段,否则为共享字段

方法可以定做在类中也可以在类外(文件中)。类外方法可以作为静态方法,另外类方法、接口、抽象方法通过注释实现。

class关键字支持。def关键字定义方法。有构造方法和析构方法。以及类似静态构造方法new方法,只执行一次,在所有方法之前执行。

通过人工手段实现规范,非原始支持这些规范。

PHP

已经启用var关键字,通过其它关键字声明作用域,语法类似Java。可读性很强。

变量作用域关键字支持全面

class 等支持良好。

编译语言?

   

Go

以C语言为原型。通过首字母大写为作用域。通过包来区分一组功能,没有类的概念。main方法为程序入口,不同操作系统编译为不同的可执行程序。

方法、接口、数据结构(类)等是同一个级别的。在Java中方法属于类,是隶属关系不平等。

新的编程思路的设计语言。非常有趣。

Scala

JVM平台语言,高阶函数支持。语法略显臃肿,或者说这样让面向对象设计的思维负担减轻(这个懒是不能偷)。支持太多,或者说不是好事。

class有一个伴生对象用Object关键字声明(单例设计)。可直接声明函数,函数不同于方法,方法定义类或者伴生对象中。伴生对象即静态支持。

Java

通过关键字声明作用域,static为所有对象共享。可读性非常好。规范性强,需要较多的设计技巧,良好支持企业级多团队开发。

C语言系列语言。

 

Javascript

关于闭包,最简单的描述就是 ECMAScript 允许使用内部函数--即函数定义和函数表达式位于另一个函数的函数体内。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数和声明的其他内部函数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。也就是说,内部函数会在外部函数返回后被执行。而当这个内部函数执行时,它仍然必需访问其外部函数的局部变量、参数以及其他内部函数。这些局部变量、参数和函数声明(最初时)的值是外部函数返回时的值,但也会受到内部函数的影响。————百度百科。

本文没有使用ECMAScript 6的新特性。如class与extends。

对于JS面向对象的详细了解,请点击这里

在文件中声明作用空间,类似java中的package。目的是区分

类模板,复用此类模板

在任意一个*.html文件中测试,直接用浏览器打开即可。

注释掉上面的测试数据,上面的属性为对象私有。下面介绍类属属性。对象共享类似静态属性、静态方法在javascript中的设计。JS中属性可以动态按需增加或删除。var声明变量为当前作用域类似private,但不是访问限制。不加代表全局作用域。

 

这里的原型只能通过类(即方法名).prototype来使用。

 

继承

在Person中加入原型属性,保持父类原型非空有意义。

  • 子类原型保存父类模板以及原型,但用父类构造方法且保存了值。这适用某些情况。

  • 模板继承,解决了上面继承值问题。但不继承原型。

Teacher类继承Person类

ECMAScript规范给所有函数都定义了Call()与apply()两个方法,call与apply的第一个参数都是需要调用的函数对象,在函数体内这个参数就是this的值,剩余的参数是需要传递给函数的值,call与apply的不同就是call传的值可以是任意的,而apply传的剩余值必须为数组。

  • 把继承抽象成工具方法,继承原型而不影响父类。但仍需要子类绑定模板。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值