objective-c(五)-面向對象之初見

今天下午沒什麼事,不上班了,課程設計也不急,本來叫人去逛街的,但現在也不想動,算了,那就不去了,那就來爲大家說說objective-c面向對象吧。

我也是初步學objective-c,開這個博客,一方面是爲我學習過程記錄一下,以後需要回顧的時候好找,另外是想爲像我這樣已經有一些其他語言開發經驗的人提供方便,讓大家學起來更加容易,我計劃等我把這塊學完爲這個開個專欄,名字就叫“不從零開始學objective-c”,呵呵``,只是計劃,只是計劃。

以前有很多很多人問我面向對象是怎麼學的,我們學校也開面向對象的課,但大家還是不懂面向對象是怎麼學的,每當同學或者朋友問起我都會淡定的打開高洛峯的《細說php》第二版224頁有這麼一句話:“面向對象這種編程思想是初學者最大的障礙,也是導致很多讀者遠離面向對象程序設計的一個原因,所以請讀者將本章的內容完全掌握之後,再在以後的學習和實踐中不斷積累,慢慢去理解和掌握面向對象程序設計思想吧”;所以面向對象的思想有時候感覺不是學會的,是慢慢品味出來的,有的人不學多長時間,代碼中就處處飄着面向對象的味道,有的人寫了幾年代碼了就仍然是面向過程的代碼編寫方式,我的建議就是先學學面向對象的鼻祖語言java基礎,也就是j2se,建立基本的面向思想,知道面向對象是什麼,起碼讓你去寫一個類能寫出來,完了我建議去學學j2ee,去接觸一下ssh框架,去看看java的設計模式,java的設計模式在ssh中體現的淋漓盡致,假如你學了ssh,你一定會感覺android是個小菜,我是先學的android,後來學校開了j2ee課接觸了一下,並不是很熟,但能感覺出那真的很強大,在那裏我更深刻的體會了工廠模式,單例模式,面向對象編程,面向接口編程,面向切面編程等等,思想覺悟提高不少,後來在外面做兼職,主要做android應用,就把好多j2ee的思想加了進去,後來做php的課程設計,我仍然使用面向對象,在php中加入了工廠模式還有j2ee的分層架構,感覺代碼結構挺好的,這套方法後來也被好好同學學了去。

說這麼多,主要是告訴大家,思想是得在實踐中慢慢鍛煉出來的,所以這不是一個可以急得事,慢慢來,相信我們都可以學好。

不說廢話了,開始我們第一個面向對象的程序,我還用以前寫的代碼來講:

#import <Foundation/Foundation.h>


@interface  Fraction:NSObject


-(void) print;

-(void) clear;

-(void) setReuslt:(double) s;



-(void) add:(double) a;

-(void) substract:(double) s;

-(void) multipy:(double) m;

-(void) divide:(double) d;



@end


@implementation Fraction


{

   double result;

}


-(void) print{

   NSLog(@"%g",result);

}


-(void) clear{

   result = 0.0;

}


-(void) setReuslt:(double) s{

   result = s;

}


-(void) add:(double)a{

   result += a;

}


-(void) substract:(double)s{

   result -=s;

}


-(void) multipy:(double)m{

   result *= m;

}

-(void) divide:(double)d{

   result /= d;

}


@end


int main(int argc,const char * argv[])

{


    @autoreleasepool {

       double a;

       scanf("%lg",&a);

       Fraction *fraction = [[Fractionalloc] init];

        [fractionsetReuslt:a];

        [fractionadd:3];

        [fractionprint];

        [fractionsubstract:3];

        [fractionprint];

        [fractionmultipy:3];

        [fractionprint];

        [fractiondivide:3];

        [fractionprint];

    }

   return 0;

}


這段代碼可以分爲三部分,interface/implemention/main

先說main部分,main部分就是main函數部分,這裏的作用我就不細說了,程序的入口,等等說了另外兩個部分,我來說說main中代碼的意思

再說interface部分,我把這部分代碼說一下,看下面註釋

/*這是interface的開頭,這部分可以在面向接口編程中叫做接口部分,也可以叫做聲明部分,以@interface開頭,@end結束,Fraction爲類名,NSObject爲父類名,objectve-c的祖宗類就是這玩意,它就好比java中的object類一樣*/

@interface  Fraction:NSObject

/*這是方法的聲明,“-”代表這是對象級別的方法,(void)是該方法的返回值類型,print是方法名,要是有形參就看setResult方法那樣“:(double) s”冒號後面是參數,(double)是型參的類型,a是形參名*/

-(void) print;

-(void) clear;

-(void) setReuslt:(double) s;


-(void) add:(double) a;

-(void) substract:(double) s;

-(void) multipy:(double) m;

-(void) divide:(double) d;


//這裏結束

@end


下面看看implemention部分

/*這部分可以叫做實現部分,以@implementation開頭,@end結束,Fraction是類名這個得和interface部分類名相同,這是在一個文件裏面寫着將來把類放在單獨文件中,這些會自動生成*/

@implementation Fraction

//這裏面定義全局變量,這裏定義的變量都是私有變量,將來在類外面訪問需要爲這個變量提供訪問方法,這些方法將來也可以自動生成,這裏體現了良好的封裝性

{

    double result;

}


//下面是對interface中方法的實現,可以不全部實現

-(void) print{

    NSLog(@"%g",result);

}


-(void) clear{

    result = 0.0;

}


-(void) setReuslt:(double) s{

    result = s;

}


-(void) add:(double)a{

    result += a;

}


-(void) substract:(double)s{

    result -=s;

}


-(void) multipy:(double)m{

    result *= m;

}

-(void) divide:(double)d{

    result /= d;

}


@end


再看看main部分


int main(int argc, const char * argv[])

{


    @autoreleasepool {

        double a;

        scanf("%lg",&a);

//這是生成該類對象,這句話可以分爲三部分

//Fraction *fraction;  聲明變量

//fraction = [Fraction alloc]; 爲該對象分配內存(c語言的方式)

//fraction = [fraction init];  初始化該對象 

        Fraction *fraction = [[Fraction allocinit];

//調用方法,objective-c中方法調用都是[],後面會說到"."的調用方法,但是推薦[]

        [fraction setReuslt:a];

        [fraction add:3];

        [fraction print];

        [fraction substract:3];

        [fraction print];

        [fraction multipy:3];

        [fraction print];

        [fraction divide:3];

        [fraction print];

    }

    return 0;

}


其實沒說多少東西,希望對大家有幫助,如果有什麼問題,歡迎留言


發佈了36 篇原創文章 · 獲贊 2 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章