1. 程式人生 > >ios學習之旅--oc對象的關系

ios學習之旅--oc對象的關系

pos 其它 對象 found self 面向對象設計原則 ipa 匿名 nsstring

1.匿名對象:就是沒有名字對象
1、匿名對象僅用一次
使用場景:
1、當我們僅僅要調用一個對象的某個方法一次的時候能夠使用匿名對象

2、匿名對象能夠作為函數的實際參數

#import <Foundation/Foundation.h>
#import "CZPerson.h"
#import "CZBook.h"

@interface CZBook : NSObject

@end

@implementation CZBook

@end

@interface CZPerson : NSObject
{
    int _age;//年齡
    NSString *_name;//名字
}
//寫方法 setter
- (void) setAge:(int) age;
//讀方法 getter
- (int) age;

- (void) setName:(NSString *) name;
- (NSString *) name;
- (void) readBook:(CZBook *) book;

@end

@implementation CZPerson

//寫方法 setter
- (void) setAge:(int) age
{
    _age = age;
}
//讀方法 getter
- (int) age
{
    return _age;
}
- (void) setName:(NSString *) name
{
    _name = name;
}
- (NSString *) name
{
    return _name;
}
- (void) readBook:(CZBook *) book
{
    
}
@end
int main(int argc, const char * argv[]) {

    [[CZPerson new] setAge:10];
    /*
      1、首先創建一個匿名人對象
      2、調用剛創建出來的人對象的 readBook方法
      3、傳入一個匿名的CZBook對象
       [CZPerson new] 創建一個匿名的人對象
       [CZBook new] 創建一個匿名的Book對象
     */   
    [[CZPerson new] readBook:[CZBook new]];    
    NSLog(@"%d",[[CZPerson new] age]);    
    
    return 0;
}
2.依賴關系:
A對象作為B對象的局部變量或是方法形參的,B依賴與A,這時候我們稱A與B之間存在一種依賴關系
面向對象設計中:
耦合度:當改動一個對象的時候。對另外一個對象的影響程度
低耦合: 當改動一個對象的對其它對象影響比較小
高內聚:一個對象只做自己相關的事情
面向對象設計原則:單一職責原則

#import <Foundation/Foundation.h>
@interface CZBeauty : NSObject
{
    NSString * _name;//姓名
}
- (void) setName:(NSString *) name;
- (NSString *) name;
/**
 *  給土豪打電話
 */
- (void) callTuHaoWithPhone:(CZPhone *) phone;
- (void) sendMessageToDiaoSi;

@end

@implementation CZBeauty

- (void) setName:(NSString *) name
{
    _name = name;
}

- (NSString *) name
{
    return _name;
}
/**
 *  給土豪打電話、
    對象作為形式參數
 */
- (void) callTuHaoWithPhone:(CZPhone *) phone
{
    NSLog(@"給土豪打電話了");
    [phone call:@"土豪的電話號碼"];
}
- (void) sendMessageToDiaoSi
{
    NSLog(@"給屌絲發送短信了");
//  對象作為另外一個類的局部變量
    CZPhone *phone = [CZPhone new];   
    [phone sendMessage:@"呵呵,要請我看電影嗎?"];
}

@end

@interface CZPhone : NSObject
/**
 *  發短信
 *
 *  @param message 信息內容
 */
- (void) sendMessage:(NSString *) message;
/**
 *  打電話
 */
- (void) call:(NSString *) phoneNum;

@end

@implementation CZPhone

/**
 *  發短信
 *
 *  @param message 信息內容
 */
- (void) sendMessage:(NSString *) message
{
    NSLog(@"發送一條 %@ 短信",message);
}
/**
 *  打電話
 */
- (void) call:(NSString *) phoneNum
{
    NSLog(@"給電話號碼為 %@ 的人打電話",phoneNum);
}

@end

int main(int argc, const char * argv[]) {
//  創建一個美女
    CZBeauty *beauty = [CZBeauty new];
//  創建一個電話
    CZPhone *phone = [CZPhone new];
    
    [beauty setName:@"fbb"];
 
    [beauty callTuHaoWithPhone:phone];
    
    [beauty sendMessageToDiaoSi];
    
    return 0;
}

3.關聯關系(多文件)
HasA關系:當一個對象擁有另外一個對象的時候,
當A對象為B對象的成員變量的時候,
A對象與B對象之間存在一種關聯關系


關聯關系是面向對象中最經常使用一種關系
---------------------------------------------------下面了解
關聯關系的耦合度要高於依賴關系

一對一 :單方依賴,雙邊依賴
一對多關系 : 班級與學生,一個班級能夠有多個學生
多對多關系 : 學生與課程。一個學生能夠學習多門課程,一個門課程被多個學生學習


#import <Foundation/Foundation.h>
#import "CZBeauty.h"
#import "CZNewBeauty.h"

int main(int argc, const char * argv[]) {  
    CZBeauty *beauty =  [CZBeauty new];
    CZIPad *ipad = [CZIPad new];    
    CZNewBeauty *newBeauty = [CZNewBeauty new];
    [newBeauty setIPad:ipad];    
    [newBeauty lookAtMovie];
    [newBeauty listenToMusic];
    [newBeauty playGame];
    [newBeauty takeSelfPhoto];
    
    return 0;
}

#import <Foundation/Foundation.h>
#import "CZIPad.h"
/*
   當我們在一類中總是使用某個對象,作為形式參數,那麽我們就把這個參數提取成員變量 
 */
@interface CZBeauty : NSObject
//使用iPad看電影
- (void) lookAtMovieWithIPad:(CZIPad *) ipad;
//使用IPad聽音樂
- (void) listenToMusicWithIPad:(CZIPad *) ipad;
/**
 * 美女玩遊戲
 */
- (void) playGameWithIPad:(CZIPad *) ipad;
/**
 *  美女自拍
 */
- (void) takeSelfPhotoWithIPad:(CZIPad *) ipad;
@end

#import "CZBeauty.h"
@implementation CZBeauty
//使用iPad看電影
- (void) lookAtMovieWithIPad:(CZIPad *) ipad
{
     NSLog(@"美女要看電影了!

"); [ipad playMovie]; } //使用IPad聽音樂 - (void) listenToMusicWithIPad:(CZIPad *) ipad { NSLog(@"美女要聽音樂了!"); [ipad playMusic]; } /** * 美女玩遊戲 */ - (void) playGameWithIPad:(CZIPad *) ipad { NSLog(@"美女要玩遊戲了!

"); [ipad playGame]; } /** * 美女自拍 */ - (void) takeSelfPhotoWithIPad:(CZIPad *) ipad { NSLog(@"美女要自拍了!

"); [ipad takePhoto]; } @end #import <Foundation/Foundation.h> @interface CZIPad : NSObject //播放電影 - (void) playMovie; //播放音樂 - (void) playMusic; //玩遊戲 - (void) playGame; //拍照 - (void) takePhoto; @end #import "CZIPad.h" @implementation CZIPad //播放電影 - (void) playMovie { NSLog(@"iPad播放電影"); } //播放音樂 - (void) playMusic { NSLog(@"iPad播放音樂"); } //玩遊戲 - (void) playGame { NSLog(@"iPad玩遊戲"); } //拍照 - (void) takePhoto { NSLog(@"iPad自拍"); } @end #import <Foundation/Foundation.h> #import "CZIPad.h" @interface CZNewBeauty : NSObject { // 讓美女擁有一個IPad CZIPad * _iPad; } //寫方法。買一個IPad - (void) setIPad:(CZIPad *) iPad; //看電影 - (void) lookAtMovie; //聽音樂 - (void) listenToMusic; /** * 美女玩遊戲 */ - (void) playGame; /** * 美女自拍 */ - (void) takeSelfPhoto; @end #import "CZNewBeauty.h" @implementation CZNewBeauty //寫方法,買一個IPad - (void) setIPad:(CZIPad *) iPad { _iPad = iPad; } //看電影 - (void) lookAtMovie { NSLog(@"美女看電影"); [_iPad playMovie]; } //聽音樂 - (void) listenToMusic { NSLog(@"美女聽音樂"); [_iPad playMusic]; } /** * 美女玩遊戲 */ - (void) playGame { NSLog(@"美女玩遊戲"); [_iPad playGame]; } /** * 美女自拍 */ - (void) takeSelfPhoto { NSLog(@"美女自拍"); [_iPad takePhoto]; } @end

學習心得:

通過各自相應的樣例,熟練掌握面向對象,為以後的學習打好基礎

ios學習之旅--oc對象的關系