您的位置:首页 > 编程语言 > Java开发

面向对象编程的面向过程表示:c java go

2014-01-15 10:23 387 查看
题目就这么抽象~。~其实一点都不抽象,老师以前也说过吧,面向对象就是建立在面向过程的基础上的。
下面这些主要是能让大家吸收一些较新鲜的编程思路,对于嵌入式编程大有裨益,对理解面向对象的底层封装全新的认识,对引入go的必要性的一些阐述。
下面以java作为面向对象语言,以c作为面向过程语言和以go作为一种新型语言进行对比。
面向对象的概念中引入了一个重要的东西就是类,类中有两种主要的东西:成员方法和成员变量,在面向过程中我们主要依靠结构体struct来抽象“类”这种数据结构中的成员变量部分,依靠函数来抽象“类“中的方法。具体请看以下例子:
在java中定义一个最简单的类
public static class Person{
//sataic是为了方便后面调用演示直接类调用
String name;
int age;
walk(){
System.out.println("walking");
}
}

在c中可以这样去实现
首先定义结构体去描述数据部分,然后去写函数来实现walk功能,最后用封装后的组合来调这种我们自己DIY的这种数据结构:
struct Person{
char[20] name;
int age;
}
下面定义方法
void Person_walk(){
println("walking");
}
最后:
在java中 Person.name和Person.walk()来执行
在c中则必须这样来用
int main(){
Person p;
?=p.name;
?=p.age;
Person_walk();
}
//类似这种代码去实现,很显然我写的很随意,完全可以用指
//针进行地址传递,我只是简单的的这样写
很明显你如果实际中真的这么写太麻烦了,首先c中没有一种现成的数据结构把成员变量和方法很好地结合在一起
除非你频繁的运用指针,另外我们无法实现过深的继承层次,还有没有”包“的概念,只有全局和局部这两种权限范围
很容易让你的代码出现未知错误。
其实在后台像c++真的是靠编译器借着隐藏的this指针翻译为c中的结构体这种类型去做的
那么我们可以看到c++(又名c with class和c plus plus)他这种叫法可以看出就是c的增强版。
但是c在现在看来是一门古老的语言,c++的标准过于复杂,以至于他的创造者都很难去完全掌握它。有没有其他的办法呢,
答案是肯定有滴,出自贝尔实验室血统的人马,加盟google后推出的go语言很好地解决了这个问题,这是一个定义为现代的,
软件工程的,为最终取代c的系统级编程语言,我们来看一看他是怎么做的:
type Person struct{
age float
name string
}

func (p *Person) Walk() {
fmt.println("walking")
}
下面是使用它的格式:
p1:=new(Person)
p1.Walk()
fmt.println(p1.age)
fmt.println(p1.name)
就这么简单,从语法上支持函数与结构体的绑定,简单调用,从而实现java中的”类“,当然除此之外的多态实现还要依靠go中的interface{}类型他就是java中的object类型的作用。下面做一点注释:go中没有每句结束的分号,因为这是不必要的。go中的:号是变量定义的简化关键字详情请百度一下。fmt是go中的标准库函数,我省略了引用,go不支持”类“,但支持面向对象这一思想。
就说这么多了,oop只是go的一方面体现,其他的功能给大家自己去发现,就是想让大家体会一下指针的强大作用,以及oo思想的另一种体现方法。
晚安喽,假期愉快。
参考资料: 《深度探索c++对象模型》《go语言编程》《c语言程序设计》《thinking in java》
本文所有代码都是简化版,不能直接运行,仅供相互对比。
go是明日之星。
by: flybutterfly
ceo#gotobe.net
#代表什么你懂的
2014.1.14


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐