1.軟件編程的實(shí)質(zhì)
編程的實(shí)質(zhì)就是將人類的思想轉(zhuǎn)換成機(jī)器可以理解的語(yǔ)言的過(guò)程脓豪。
學(xué)習(xí)的核心問(wèn)題就是掌握這種思維的方式。
OC是一種面向?qū)ο蟮恼Z(yǔ)言蹦浦。
2.對(duì)象
面向?qū)ο笫窍鄬?duì)面向過(guò)程而言。面向?qū)ο蠛兔嫦蜻^(guò)程都是一種思想端圈。
例如洗衣服這件事的不同理解。
面向過(guò)程的方式去理解:準(zhǔn)備衣服已經(jīng)相關(guān)的用品子库,打開洗衣機(jī)舱权,放入衣服和洗衣液,啟動(dòng)洗衣機(jī)仑嗅。
面向 對(duì)象的理解方法:買個(gè)全自動(dòng)洗衣機(jī)宴倍,準(zhǔn)備要洗的衣物及用品〔旨迹或者找個(gè)人幫你洗鸵贬,呵呵。
面向過(guò)程:按人們認(rèn)識(shí)客觀世界的系統(tǒng)思維方式脖捻,采用基于對(duì)象(實(shí)體)的概念建立模型阔逼,
模擬客觀世界分析、設(shè)計(jì)地沮、實(shí)現(xiàn)軟件的辦法嗜浮。通過(guò)面向?qū)ο蟮睦砟钍褂?jì)算機(jī)軟件系統(tǒng)能與現(xiàn)實(shí)世界中的系統(tǒng)一一對(duì)應(yīng)。
面向?qū)ο螅菏且环N解決軟件復(fù)用的設(shè)計(jì)和編程方法摩疑。這種方法把軟件系統(tǒng)中相近相似的操作邏輯和操作應(yīng)用數(shù)據(jù)危融、狀態(tài),
以類的型式描述出來(lái)雷袋,以對(duì)象實(shí)例的形式在軟件系統(tǒng)中復(fù)用吉殃,以達(dá)到提高軟件開發(fā)效率的作用。
它的優(yōu)點(diǎn)是可以大幅度提高軟件項(xiàng)目的成功率楷怒,減少維護(hù)的費(fèi)用蛋勺,提高可移植性和可靠性。
面向?qū)ο笤O(shè)計(jì)四個(gè)個(gè)主要特征
1鸠删、抽象性
2迫卢、繼承性
3、封裝性
4冶共、多態(tài)性
二者的區(qū)別:
面向過(guò)程是把問(wèn)題中的數(shù)據(jù)用算法進(jìn)行描述,強(qiáng)調(diào)功能性每界;
面向?qū)ο笫前压δ芊庋b進(jìn)對(duì)象捅僵,強(qiáng)調(diào)問(wèn)題的解決需要哪些對(duì)象的使用。
面向?qū)ο蟮木幊趟枷胧腔诿嫦蜻^(guò)程發(fā)展而來(lái)的眨层,這是計(jì)算機(jī)程序設(shè)計(jì)發(fā)展到一定階段的必然產(chǎn)物庙楚。
3.類和對(duì)象
class 類:類是具有相似內(nèi)部狀態(tài)和運(yùn)動(dòng)規(guī)律的實(shí)體的集合(或統(tǒng)稱、抽象)趴樱。
對(duì)象(object):即指現(xiàn)實(shí)世界中各種各樣的實(shí)體馒闷。它可以指具體的事物也可以指抽象的事物酪捡。
消息(Message):
消息是指對(duì)象間相互聯(lián)系和相互作用的方式。一個(gè)消息主要由5部分組成:發(fā)送消息的對(duì)象纳账、接收消息的對(duì)象逛薇、消息傳遞辦法、消息內(nèi)容(參數(shù))疏虫、反饋永罚。
例如施工圖紙可以看成是房子的類,汽車設(shè)計(jì)圖可以看成是車的類等卧秘,類是事物的一種抽象概況呢袱。
一個(gè)類可以實(shí)例化出多個(gè)對(duì)象。
類(Class) 一個(gè)類由3個(gè)部分構(gòu)成:
類的名稱:類名
類的屬性:一組包含數(shù)據(jù)的屬性
類的方法:允許對(duì)屬性中包含的數(shù)據(jù)進(jìn)行操作的方法
對(duì)象(object):
是系統(tǒng)中的基本運(yùn)行實(shí)體翅敌;對(duì)象就是類類型(class type)的變量羞福;
定義了一個(gè)類,就可以創(chuàng)建這個(gè)類的多個(gè)對(duì)象蚯涮;一個(gè)類就是具有相同類型的對(duì)象的抽象治专;
類的抽象方法:一般可以用到名字抽象法,就是說(shuō)名詞一般都是一類恋昼。
小明玩電腦
人類-對(duì)象是小明 ?電腦是一類 ?玩-是小明的行為
4.類的聲明和實(shí)現(xiàn)
在OC中類的定義有兩部分:類的聲明看靠、類的實(shí)現(xiàn)。
.h:
類的聲明文件液肌,用于聲明成員變量挟炬、方法。類的聲明使用關(guān)鍵字@interface和@end嗦哆。
注意:.h中的方法只是做一個(gè)聲明谤祖,并不對(duì)方法進(jìn)行實(shí)現(xiàn)。
也就是說(shuō)老速,只是說(shuō)明一下方法名粥喜、方法的返回值類型、方法接收的參數(shù)類型而已橘券,并不會(huì)編寫方法內(nèi)部的代碼额湘。
.m:
類的實(shí)現(xiàn)文件,用于實(shí)現(xiàn).h中聲明的方法旁舰。類的實(shí)現(xiàn)使用關(guān)鍵字@implementation和@end锋华。
方法的聲明和實(shí)現(xiàn),都必須以 + 或者 -開頭:
+ ?表示類方法(靜態(tài)方法)
- ? 表示對(duì)象方法(動(dòng)態(tài)方法)
在.h中聲明的所有方法作用域都是public類型箭窜,不能更改毯焕。
成員變量的常用作用域有3種:
@public 全局都可以訪問(wèn)
@protected 只能在類內(nèi)部和子類中訪問(wèn)
@private 只能在類內(nèi)部訪問(wèn)
聲明一個(gè)類 ? .h:
@interface Student : NSObject{
int age;
NSString * name;
}
-(void)goToClass;
@end
實(shí)現(xiàn)一個(gè)類 ? .m:
@implementation
-(void)goToClass{
NSLog(@"Goto class!");
}
@end
5.創(chuàng)建一個(gè)對(duì)象
用類的方式告訴了計(jì)算機(jī)我們需要一個(gè)什么樣的對(duì)象,之后我們要在程序中使用這個(gè)對(duì)象磺樱,就必須先創(chuàng)建一個(gè)對(duì)象
Student *stu = 【Student new】纳猫;
只要是用new操作符定義的實(shí)體就在會(huì)堆內(nèi)存中開辟一個(gè)新的空間婆咸。
【Student new】在內(nèi)存中干三件事:
1.開辟存儲(chǔ)空間
2.初始化成員變量
3.返回指針地址
通過(guò) 對(duì)象->對(duì)象成員(注意聲明屬性為:@public)的方式操作對(duì)象中的成員,對(duì)其中一個(gè)對(duì)象的成員進(jìn)行了修改芜辕。和另一個(gè)對(duì)象沒(méi)有關(guān)系尚骄。
6.無(wú)參數(shù)方法的聲明與調(diào)用
OC中有類方法和對(duì)象方法。
對(duì)象方法:
對(duì)象方法是減號(hào)-開頭的物遇;
對(duì)象調(diào)用對(duì)象方法乖仇;
對(duì)象方法中可以訪問(wèn)當(dāng)前的對(duì)象成員變量;
調(diào)用對(duì)象方法的格式 【對(duì)象名 ?對(duì)象方法名】
類方法:
類方法是加號(hào)+開頭的询兴;
類方法只能類去調(diào)用乃沙;
類方法中不可以訪問(wèn)成員變量,因?yàn)轭愒谡{(diào)用類方法的時(shí)候并沒(méi)有分配內(nèi)存空間诗舰,所以無(wú)法存儲(chǔ)成員變量值警儒;
調(diào)用的格式 ?【類名 ?類方法名】
類方法的好處和適用場(chǎng)合:
不依賴于對(duì)象,執(zhí)行效率更高眶根;
能用類方法解決的問(wèn)題蜀铲,盡量使用類方法;
場(chǎng)合:當(dāng)方法內(nèi)部不需要使用到成員變量時(shí)属百,可以改為類方法记劝。
聲明一個(gè)不帶參數(shù)的對(duì)象方法:
-(void)goToClass;
【stu ?goToClass】;
或者
對(duì)象名 . 方法名 (點(diǎn)語(yǔ)法)
7.有參數(shù)方法的聲明與調(diào)用
帶參數(shù)的方法定義:
-(int) sum : (int) a and : (int) b;
-表示這是一個(gè)對(duì)象方法
int是返回值類型
sum: and: 是方法名族扰。注意冒號(hào)也是方法名的一部分厌丑。
a b 是參數(shù)名
方法的調(diào)用:
【c ?sum:1 and:2】
c是一個(gè)指針變量名 ,給方法傳遞兩個(gè)參數(shù)渔呵。
思考與實(shí)現(xiàn):
定義一個(gè)電話類實(shí)現(xiàn)一些基礎(chǔ)功能怒竿。
聲明部分:
typedef enum color{White ,Black,colorTHJ} iColor;
@interface iPhone : NSObject{
iColor _color;
float ? _size;
}
-(void)aboutMyPhone;
-(void)call : (NSString *) num;
@end
實(shí)現(xiàn)部分:
@imlementation
-(void)aboutMyPhone{
NSLog(@"顏色 :%d,大欣┣狻:%.2f ",_color,_size);
}
-(void)call : (NSString *) num{
NSLog(@"給 %@ 打電話耕驰。",num);
}
@end
調(diào)用部分:
iPhone *iph = [iPhone new];
[iph aboutMyPhone];
[iph ?call:"10086"];