当前位置: 首页 > news >正文

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

学习心得:

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

转载于:https://www.cnblogs.com/yutingliuyl/p/7350379.html

相关文章:

  • 自己写的分页器,BOOTSTRAP+JQUERY(非完全版,后续完善)
  • spring data jpa的update操作
  • 详解java定时任务
  • day7回顾
  • Get和Post的参数传值
  • Linux查看占用GPU的进程
  • C++ 类型声明
  • 信息系统项目管理师----成本类计算
  • 【JavaScript】JavaScript赋值语句中的逻辑与和逻辑或||
  • NS3网络仿真(10): 解析以太网帧
  • Redis API 必杀解读:引入RedisTemplate
  • 第十五 jQuery
  • 设置防火墙使mysql可以远程连接的方法
  • 【转】mysql explain执行计划详解
  • iOS平台设置系统状态栏(通知栏、顶部状态栏)样式背景颜色或透明
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • ECS应用管理最佳实践
  • gulp 教程
  • Iterator 和 for...of 循环
  • Java Agent 学习笔记
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • JS基础之数据类型、对象、原型、原型链、继承
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • Node + FFmpeg 实现Canvas动画导出视频
  • select2 取值 遍历 设置默认值
  • Swift 中的尾递归和蹦床
  • ubuntu 下nginx安装 并支持https协议
  • VuePress 静态网站生成
  • 后端_ThinkPHP5
  • 理解在java “”i=i++;”所发生的事情
  • 排序算法之--选择排序
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 算法-插入排序
  • 小程序开发中的那些坑
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • 进程与线程(三)——进程/线程间通信
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (二十四)Flask之flask-session组件
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (剑指Offer)面试题34:丑数
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (全注解开发)学习Spring-MVC的第三天
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (转)平衡树
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .net core使用ef 6
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • .NET的数据绑定
  • @WebServiceClient注解,wsdlLocation 可配置
  • [ element-ui:table ] 设置table中某些行数据禁止被选中,通过selectable 定义方法解决