哲学大师-通过共性与个性的概念来理解类与对象

文章目录

  • 哲学大师-通过共性与个性的概念来理解类与对象
    • 如何理解
      • 什么是共性与个性
      • 怎么把理解类与对象
      • 类与对象里面有什么
    • 如何定义
      • 怎么去定义一个类
      • 定义类的接口部分
      • 定义类的实现部分
    • 如何使用
      • 如何去定义一个变量
      • 如何去创建一个对象
      • 如何去调用类方法
    • 除此之外
      • 如何运用 self 关键字
      • 形参个数可变的方法
    • 本篇小结

如何理解

什么是共性与个性

相信看过高中必修三的大家都有印象,但是我们还是来复习一下吧

共性指不同事物的普遍性质;个性指一事物区别于其他事物的特殊性质
共性和个性是一切事物固有的本性,每一事物既有共性又有个性
共性决定事物的基本性质;个性揭示事物之间的差异性

怎么把理解类与对象

类即类别,可以看成是共性
对象也称实例,可以看成是个性

对标上述三点:

  1. 类具有不同对象的普遍性质;对象内的数据又有区别其他对象的特殊性质
  2. 每个对象都有属于的类,每个对象都有它自己的数据,又有类的成员变量与方法
  3. 类决定它的对象的变量与方法,不同对象之间存储的数据可以不同

类与对象里面有什么

对于面向编程来说,有两个非常重要的概念:成员变量方法

  1. 成员变量:用于描述该类的对象状态的数据

  2. 方法:用于描述该类的行为

如何定义

怎么去定义一个类

Objective-C 中定义类有两个步骤 定义接口部分与实现部分

  1. 接口部分:定义该类包含的成员变量与方法
  2. 实现部分:为该类的方法提供实现

定义类的接口部分

  1. 用 @interfac 来声明类的接口部分
  2. 用紧跟类的一对花括号声明该类成员变量
  3. 后面部分声明该类的方法
  4. 用 @end 表示声明结束

如下

//ECPerson.h
#import<Foundation/Foundation.h>@interface ECPerson : NSObject
//interface 中文意思即接口
//Myclass 是此处定义的类名
// NSObject 是 Myclass 继承的父类名
{int _age;NSString* _name;//可以使用任何类型//变量名应为下划线 + 驼峰命名法
}- (void)setName: (NSString*)name andAge: (int)age;
//‘-’ 表示该方法为实例方法;对象又称实例
//在方法声明中,所有的类型都应该用圆括号括起
//id 可以代表所有对象类型,会在运行时候确定需要动态调用的方法而非在编译时候确定(动态绑定)
- (void)say: (NSSting*)content;
- (NSString*) info;
+ (void)foo;
//‘+’ 表示该方法为类方法
//二者不可混淆 对象方法调用者只能是对象,类方法同理
@end

Object-C 的方法签名:
“方法名” + “:” + ”形参声明“
无冒号即该方法不带形参声明

定义类的实现部分

  1. 类实现部分的类名应该与接口部分相同
  2. 实现部分也可在声明成员变量,但是只能在实现部分使用
  3. 必须为接口部分每个方法提供方法定义

看看语法

//ECPerson.m
#import"ECPerson.h"@implementation ECPreson {int _testAttr;//只能用于实现部分,相当于被隐藏
}
- (void)setName: (NSString*)n andAge: (int) a {_name = n;//方法形参名不同是被允许的//相同反而更麻烦,重名时局部变量会覆盖成员变量_age = a;
}
- (void)say: (NSString*)content {NSLog(@"%@", content);
}
- (NSString*) info {[self test];return [NSString stringWithFomat: @"name %@, age %d.", _name, _age];
}
- (void)test {NSLog(@"1");//只能在实现部分使用的方法
}
+ (void) foo {NSLog(@"ECPerson");//可通过类名调用
}

如何使用

如何去定义一个变量

语法格式如下
类名 变量名;*

如何去创建一个对象

语法格式如下
[[类名 alloc] 初始化方法];

alloc 是 Objective-C 的关键字,负责为该类分配空间,创建对象 分配空间之后是初始化,由于所有对象都继承 NSObject
类,故都有一个默认初始化方法 init 也支持 用 new 初始化,但是不建议,所以不过多介绍了

如何去调用类方法

无论调用类方法还是实例方法,结构都是一样的,需要有主谓宾三个部分

语法格式如下
[调用者 方法名:参数 形参标签:参数值 …];

如果声明多个形参,需要为每个形参传入相应的值
实例方法必须用实例调用,类方法必须用类调用

Objective-C 允许直接通过对象访问成员变量

语法格式如下
对象->变量名;

除此之外

如何运用 self 关键字

self 表示出现方法(只应在方法中出现)中的调用者,可以通过其访问该类的另一个方法或成员变量,也可做返回值
具体怎么样做呢?来看看吧

#import<Foundation/Foundation.h>
#import"ECDog.h"@implementation ECDog
- (void)jump {NSLog(@"doing jump");
}
- (void)run {[self jump];NSLog(@"doing  run");
}
@end

self 总是代表当前方法的调用者,谁在调用该方法,self 就代表谁
通过 self 也可以避免成员变量被局部变量覆盖,实现强行访问成员变量

形参个数可变的方法

在最后一个形参名后加逗号与三个点
注意: 个数可变的形参只能处于列表的最后,即一个方法中最多只能有一个个数可变的形参
光说不练怎么行,来看我定义一个方法

#import<Foundation/Foundation.h>@interface VarArgs: NSObject
- (void)test: (NSString*)name, ...;
@end

那么如何获取呢?
可以通过以下关键字

  1. va_list 用于定义指向列表的指针变量的类型
  2. va_start 指定开始处理的列表并让指针变量指向第一个参数的函数
  3. va_end 结束处理可变形参,释放指针变量的函数
  4. va_arg 返回获取指针当前指向参数的值,并将指针移动到下一个参数的函数

不难看出,上述关键词操作类似于链表操作,故也可以把其看作链表而非列表来理解

来看看实现吧

#import"VarArgs.h"@implementation VarArgs
//arg 即自变量 argument 的缩写
- (void)test: (NSString*)name, ... {va_list argList;//类似初始化链表if (name) {//先确定 name 是存在的NSLog(@"%@", name);va_start(argList, name);//类似获取链表头指针NSString* arg = va_arg(argList, id);//类似逐个遍历链表while (arg) {NSLog(@"%@",arg);arg = va_arg(arglist, id);}va_end(argList);//类似释放链表}
}
@end
int main(int argc, char* argv[]) {@autoreleasepool {VarArgs* va = [[VarArgs alloc] init];[va test: @"111", @"222", @"333", nil];//最后一个为 nil 以明确结束点}
}

本篇小结

  1. 类与对象可以理解为共性与个性的关系
  2. 类与对象中包含成员变量与方法两个重要概念
  3. 定义类需要定义其接口与实现两个部分
  4. 定义一个变量与创建一个对象的语法格式
  5. 调用类与实例方法与直接访问成员变量
  6. 通过self关键字调用方法的调用者
  7. 形参个数可变但是最多只有有一个在最后

[Objective-C]哲学大师-通过共性与个性的概念来理解类与对象相关推荐

  1. 面向对象设计:共性VS个性-------继承的粒度和聚合的粒度以及类的重构

    共性和个性 依据面向对象的原理.类是对象的抽象.也就是说.类是一系列的既有共性又有个性的对象的高度概括,类的属性和方法代表了隶属于该类的全部对象的共性,类的每一个对象实例都能够有不同的属性值,这反映了 ...

  2. 7、面向对象设计:共性VS个性

    一尺之捶,日取其半,万世不竭! 7.2 对象和类的粒度 7.2.1 CPU难题 处理有包容关系的类,用继承机制还是聚合机制? 多态性的机制可以大量减少条件判断语句的重复. 继承和动态绑定 7.2.2 ...

  3. 安防IT化如何把握其中的共性与个性

    在IT化的冲击下,安防系统的产品线.产业结构将会改变(被压缩).具体的说:就是安防系统"云"化,前端产品"云端"化,前者体现安防与其它系统的共性,后者将表现出安 ...

  4. 抽象基类与接口,共性与个性的选择!

    抽象基类与接口,共性与个性的选择! C#中的抽象基类(Abstract Class)和接口(Interface)都实现了面向对象中的继承机制,它们通过定义抽象方法匀实现了对继承类的功能上的约束,那么在 ...

  5. 【转】抽象基类与接口,共性与个性的选择!

    抽象基类与接口,共性与个性的选择! C#中的抽象基类(Abstract Class)和接口(Interface)都实现了面向对象中的继承机制,它们通过定义抽象方法匀实现了对继承类的功能上的约束,那么在 ...

  6. #Sam有话说#人以群分,共性与个性的智慧

    #Sam有话说#人以群分,共性与个性的智慧 [图片来源36kr,鸣谢] 常言有道,物以类聚.人以群分. 群,是以共性区分之众人圈落:同中有异,是个性的张扬显赫. 产品的用研常常在大众与个性间徘徊.QQ ...

  7. 抽象基类与接口,共性与个性的选择!(区别)

    C#中的抽象基类(Abstract Class)和接口(Interface)都实现了面向对象中的继承机制,它们通过定义抽象方法匀实现了对继承类的功能上的约束,那么在如何在恰当的场景选择恰当的继承机制是 ...

  8. [转]抽象基类与接口,共性与个性的选择!

    [url]http://www.cnblogs.com/shenfx318/archive/2007/01/25/630760.html[/url] C#中的抽象基类(Abstract Class)和 ...

  9. 抽象基类与接口,共性与个性的选择

    C#中的抽象基类(Abstract Class)和接口(Interface)都实现了面向对象中的继承机制,它们通过定义抽象方法匀实现了对继承类的功能上的约束,那么在如何在恰当的场景选择恰当的继承机制是 ...

最新文章

  1. 原创 | 大数据时代,应让“抗疫”更科学
  2. SAP MM 物料库存转固定资产,报错:You cannot post to asset in company code 1900 fiscal year 2021
  3. 对话AI大师Bengio:AI不应变成军备竞赛
  4. Java NIO示例:多人网络聊天室完整代码
  5. [转]暴牛!全国女生录用老公统一考试试卷
  6. Python set集合 - Python零基础入门教程
  7. 故障转移集群仲裁盘_MongoDB负载均衡、故障转移及海量数据应对方案
  8. [题解] 2038: [2009国家集训队]小Z的袜子(hose)
  9. SQLServer安装时哪些功能是必需的(sql server 2016安装时选择哪些功能)
  10. 专题讲座3 数论+博弈论 学习心得
  11. python利用百度翻译器,爬取需要翻译的关键字
  12. NetBeans IDE12.3无法卸载
  13. GameofMir引擎架设传奇服务器【1:架设服务端】
  14. linux系统虚拟鼠标的实现
  15. 【Python】python 字符串转数组
  16. 在哪下载Mysql数据库的JDBC驱动jar包
  17. 独享云虚拟主机、共享云虚拟主机、云服务器 ECS 区别
  18. yolov7正负样本分配详解
  19. Logstash 数据保护机制
  20. Python 打印和输出

热门文章

  1. plt.boxplot()函数绘制箱图、常用方法及含义详解
  2. 怎样使用BorderLayout管理布局页面?效果怎样?
  3. 使用LISTAGG函数进行行转列
  4. SpringBoot+Vue项目私人健身与教练预约管理系统
  5. C++动态内存分配与命名空间
  6. Django综合案例之英雄人物1
  7. 前端页面jquery处理分子式,离子,化学反应方程式的方法与思路。
  8. 方法返回值前的泛型作用
  9. git clone 提速方法
  10. java基本类型和包装类型