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

题目就这么抽象~。~其实一点都不抽象,老师以前也说过吧,面向对象就是建立在面向过程的基础上的。
     下面这些主要是能让大家吸收一些较新鲜的编程思路,对于嵌入式编程大有裨益,对理解面向对象的底层封装全新的认识,对引入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 


你可能感兴趣的:(java,c,面向过程,面向对象,OO,Go)