面向對象編程的面向過程表示:c java go

題目就這麼抽象~。~其實一點都不抽象,老師之前也說過吧,面向對象就是創建在面向過程的基礎上的。
     下面這些主要是能讓你們吸取一些較新鮮的編程思路,對於嵌入式編程大有裨益,對理解面向對象的底層封裝全新的認識,對引入go的必要性的一些闡述。
     下面以java做爲面嚮對象語言,以c做爲面向過程語言和以go做爲一種新型語言進行對比。
     面向對象的概念中引入了一個重要的東西就是類,類中有兩種主要的東西:成員方法和成員變量,在面向過程當中咱們主要依靠結構體struct來抽象「類」這種數據結構中的成員變量部分,依靠函數來抽象「類「中的方法。具體請看如下例子:
在java中定義一個最簡單的類java

 public static class Person{ 
                                //sataic是爲了方便後面調用演示直接類調用
                    String name;
           int age;
             walk(){
                  System.out.println("walking");
           }
                                  }
c++

    在c中能夠這樣去實現
    首先定義結構體去描述數據部分,而後去寫函數來實現walk功能,最後用封裝後的組合來調這種咱們本身DIY的這種數據結構:編程

struct Person{
            char[20] name;
int age;
數據結構

   下面定義方法編程語言

void Person_walk(){
println("walking");
函數

     最後:
    在java中 Person.name和Person.walk()來執行
    在c中則必須這樣來用 oop

int main(){
Person p;
?=p.name;
?=p.age;
Person_walk();
this

                                                                                                //相似這種代碼去實現,很顯然我寫的很隨意,徹底能夠用指
                                                                                                //針進行地址傳遞,我只是簡單的的這樣寫 
    很明顯你若是實際中真的這麼寫太麻煩了,首先c中沒有一種現成的數據結構把成員變量和方法很好地結合在一塊兒
除非你頻繁的運用指針,另外咱們沒法實現過深的繼承層次,還有沒有」包「的概念,只有全局和局部這兩種權限範圍
很容易讓你的代碼出現未知錯誤。
    其實在後臺像c++真的是靠編譯器藉着隱藏的this指針翻譯爲c中的結構體這種類型去作的
    那麼咱們能夠看到c++(又名c with class和c plus plus)他這種叫法能夠看出就是c的加強版。
可是c在如今看來是一門古老的語言,c++的標準過於複雜,以致於他的創造者都很難去徹底掌握它。有沒有其餘的辦法呢,
答案是確定有滴,出自貝爾實驗室血統的人馬,加盟google後推出的go語言很好地解決了這個問題,這是一個定義爲現代的,
軟件工程的,爲最終取代c的系統級編程語言,咱們來看一看他是怎麼作的
google

type Person struct{
age float
name string


func (p *Person) Walk()  {
fmt.println("walking")
spa

下面是使用它的格式:

     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 

相關文章
相關標籤/搜索