ios学习之旅--oc对象的关系

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

学习心得:

通过各自相应的样例,熟练掌握面向对象,为以后的学习打好基础

时间: 2024-08-01 09:03:24

ios学习之旅--oc对象的关系的相关文章

iOS学习之旅10 ATS(App Transport Security)对HTTPS协议要求引起的问题

问题描述 编写以下代码获取网络某个资源的MIMEType 1 -(void)getMIMEType 2 { 3 //路径 4 NSURL *url = [NSURL URLWithString:@"https://www.baidu.com/img/bd_logo1.png"]; 5 //请求对象 6 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 7 NSOperationQueue *

IOS学习之路--OC的基础知识

运行过程 1.编写OC程序:.m源文件 2.编译.m文件为.o目标文件:cc -c xxxx.m 3.链接.o文件为a.out可执行文件:cc xxxx.o -framework Foundation 4.执行a.out文件:./a.out #import 的功能跟#include一样,只是更好用,他避免了头文件的多次包含 为了能使用OC的特性, 一定要引入#import <Foundation/Foundation.h> 类定义// @implementation 和 @end // 设计(

【IOS学习基础】OC类的相关

几天前突然在别人的类的.m文件中看到这么一句代码:@synthesize xxxx = _xxxx; 当时愣是没理解啥意思,过后才缓过神来发现原来是把一些类的基础知识忘记了,虽然不用过多去深究以前的一些旧东西,但但是既然遇到了,还是复习一下. 一.类与对象 1.类:类是定义同一类所有属性和方法的蓝图或原型. 2.对象:用来描述客观事物的一个实体,由具体的属性和方法构成. 3.类与对象的关系:类是用来制作无数实体(对象)的工程图纸. 4.类的特征:属性 5.类的行为:方法 二.封装 1.类就是封装

我的北京ios学习之旅03

来到北京第三个周了,这个周oc语言的学习也渐渐进入尾声了,帝都也真是热的不行,还好教室还是很凉快的.也熟悉的这边的日常生活和起居,渐渐的有了学习的样子. 周末还和骏哥一起去天安门玩了下,第一次去什么感觉也说不出来,反正就是累,转路还去了鸟巢和水立方,虽然没进去,只是远远的观望了下.也算留下脚印了.有时间还想去长城看看.老师讲课到了现在更是能感受细致的教学方式了,不用害怕基础差,只要努力我相信我一定能做好,学完OC和C,接下来就是更重要的了.继续努力加油.人生不需要多少计划,遇到就是缘分,碰上就是

iOS学习之旅9 ZipArchive和SSZipArchive

SSZipArchive 简介 ZipArchive是iOS和Mac上一个简单实用的压缩和解压插件.用途包括:1.解压zip文件:2.解压密码保护的ZIP文件:3.创建新的zip文件:4.追加文件到现有的压缩:5.压缩文件:6.压缩NSData(带有文件名) ZipArchive的GitHub地址:https://github.com/ZipArchive/ZipArchive 压缩 dfad 解压 1221 ZipArchive 简介 dfdfdff 压缩 dfad 解压 1221

EF Code-First 学习之旅 配置一对一的关系

1对1.1对0 的关系 例如:Entity1与零个或一个Entity2的实例有关系 public class Student { public Student() { } public int StudentId { get; set; } public string StudentName { get; set; } public virtual StudentAddress Address { get; set; } } public class StudentAddress { publi

ios学习之旅---指针也不难

1.认识指针 #include <stdio.h> //基本数据类型作为函数參数传递是值传递 //void moveFront(int x ,int y) //{ // x = x + 2; //} void test() { // 确定当前坐标 int x = 20; int y = 150; printf("%p\n",&x); printf("%lu\n",&x); *((int *)(0x7fff5fbff76c)) = 22;

iOS学习第二天(OC中常用的数据类型)

一.CGPoint定义一个点,两个参数分别是x,y 1>CGPoint p = {100,100}; 2>CGPoint p; p.x = 100; p.y = 100; 3>CGPoint p = CGPointMake(100,100); 二.CGSize定义一个大小:两个参数分别是width , height 三.CGRect定义一个矩形:四个参数分别是origin.x , origin.y , size.width , size.height 四.NSRange定义一个范围:两个

IOS学习之旅-UI基础设置

#import "ViewController.h" @interface ViewController () //声明顺序:全局变量.属性.方法 - (void)initailizeUserInterface; //初始化用户界面 @end - (void)initailizeUserInterface; //初始化用户界面 @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; [