什么是面向过程,什么事面向对象?
例子 完成需求
- 根据自己的需求和预算来初步的确定电脑的种类.
- 查找资料确定电脑的型号.
- 坐地铁去华强北.找到Apple专卖店.
- 砍价成功
- 愉快的回家
有可能买电脑的时候被坑,非常不愉快
解决方案: 找一个电脑高手,穴长跟你一起去.
1. 我什么都不用做
2. 只需要带上电脑高手带上钱
3. 完了就请他吃一个河粉,愉快的搞定了.
什么是电脑高手,是精通电脑,并且对电脑的行情非常熟悉.带上他你绝对不会被骗
解决同一个问题的两种思路
- 自己买电脑: 强调的是步骤,不能颠倒,自己是整个事情的主题,我是彻头彻尾的执行者,每件事情都是自己做.
- 电脑高手买电脑: 电脑高手是整个事情的主题,我是1个扬眉吐气的指挥者.
很明显下面这种方式是更好的.他专业.
- 解决这个问题的每一个步骤,都是我自己亲自去实现,这样的思路叫面向过程
- 自己不要亲自去做,而是找一个专门做这个事情的人来帮我做,像这样解决问题的思路,我们叫面向对象的解决思路
面向过程和面向对象:==就是解决同一个问题不同的思路而已==
> 我们做的大部分事都是面向对象的,因为对象是专业的,自己做起来麻烦,效果不好.
代码世界中面向对象
找一个专门做排序的来排序,一个能实现这个功能的代码来实现你的需求.
面向对象和面向过程的优缺点分析
面向过程 | 面向对象 |
---|---|
C语言就是面向过程的语言 | OC语言就是一门面向对象的语言. |
一旦需求发生变化,就要代码推到重新来 | 需求变化的话,换个对象就能满足,后期维护修改方便 |
C语言有函数,函数之间是相互独立的,一个函数就是一个功能 | 一个人叫数组,他有与数组相关的很多功能. |
如果使用面向对象来解决问题
- 当你遇到需求的时候,千万要记住,不要自己一步一步的去实现,后期不好维护
- 框架.框架中就有很多人在听你的召唤.不同的框架当中预置了很多可以做很多不同事情的人.( 类 ).
- 首先先去找预置的框架当中有没有专门做这个事情的人,如果有直接喊过来用.
- 如果没有,就自己造一个可以实现这个需求的人.( 自己造的现在可以用这个人,以后也可以使用).
什么是类和对象?
什么是对象?
买电脑的高手和装大象的冰箱就是对象.是现实生活当中的==具体存在==,特点是看得见摸得着拿过来就可以用.
什么是类?
千万不要跟那一类人一起玩.因为那一类人都有==相同的特征和行为==.物以类聚,人以群分.类是统称,是抽象的,不能直接使用.
类就比如: 学生.电脑,食物,水果,苹果都是类,交通工具,车,汽车,奔驰汽车,奔驰汽车GLS.
对象就是: 小明早上吃的那颗苹果,曾凡怡的MBA,我家里那辆雷凌
==只要不具体到某一个就是统称,就是类==
类和对象之间的联系
- 类是来干啥的:用来描述一群具有相同特征和行为的事物
- 对象是一类事物中的1个具体的存在.
- 类是模板,规定好了什么样的东西才叫这一类.找到一个对象就必须要有模板规定的,不能多不能少.
- 类是造月饼的模子,模子不能吃,类是不能用的
- 对象是根据模子造出来的月饼,上面的花纹不会多不会少.特征和行为不会多不会少.
- ==对象是满足类的特征的一个个体==.==类是一个特征和行为的模板==
- 汽车图纸和汽车,房屋平面图和房子.
如何设计一个类
- 是来干嘛的? : 具有相同特征和行为的事物
- 设计类的三要素
> 1. 这类事物的名称
> 2. 这类事物具有的共同的特征,都拥有什么
> 3. 这类事物具有的共同的行为,具备什么样的功能
>
设计有个电脑类:
> 名称: 电脑
> 特征: CPU 内存 显卡 声卡...
> 行为: 开机 关机 放电影...
>
人类:
> 人:
> 特征:姓名 性别 年龄...
> 行为:走路 吃饭...
> - ==如何找类==? 名词提炼法:分析整个业务流程中出现了哪些名词,这些名词就是类, 然后根据类的三要素没来分析这些类有哪些特征和行为
三两坦克发射了6枚炮弹大众了两架飞机
坦克类:
特征: 颜色,尺寸,型号,炮弹,...
行为: 发射
炮弹类:
特征: 威力,射程...
行为: 爆炸,飞行...
飞机类:
特征: 颜色 大小 翅膀...
行为: 飞行 攻击 爆炸...
小明在公交车上牵着一只叼着热狗的狗
人类:
特征: 姓名,年龄,狗
行为: 遛狗
公交车类:
特征: 大小,座位数...
行为: 载客 行使
热狗:
特征: 大小,颜色,气味...
行为: 散发气味
狗:
特征: 姓名 品种 热狗...
特征: 吃,叼热狗
如何使用代码定义一个类
- 为什么要定义,因为要描述一群具有相同特征和行为的事物.
- 设计类的三要素.类名,特征,行为.
- 定义一个类的语法
a. 定义类的位置,写在main函数的外面.直接写在源文件下.
b. 在OC当中创建一个类,需要两个步骤.
-->类的声明
@interface 类名: NSObject
{
//这类事物具有的相同的特征.
//把这些特征定义为一个一个的变量.
数据类型1 变量名1;
数据类型2 变量名2;
......
}
//写上这类事物具有的共同的行为,用方法来表示.
//写上方法的声明
@end
-->类的实现
@implmentation 类名
方法的实现.
@end
//person类的声明
@interface Person : NSObject
{
NSString *_name;
int _age;
float _height;
float _weight;
}
@end
//person类的实现
@implementation Person
@end
c. 需要注意的是
类所具备的共同的特征,应该是以变量的形式声明在@interface的大括弧中.
- 定义的时候必须要注意的
a. 类必须要有声明和实现.必须同时有
b. 类名 这个类是用来描述哪一类事物的,直接使用这类事物的名称当做这个类的名称,类名的每一个单词的首字母大写
c. 写类的时候,类名不能和框架中的类的名字冲突,为了防止冲突我们给类加一个前缀.
d. 冒号后面的NSObject 不要管什么意思 照写.
e. 用来表示这类事物具有的共同的特征的变量应该定义在@interface的大括号中.这些变量有人叫: 特征,属性,成员变量,实例变量,字段,实例字段.
f. 属性的名称必须要以_开头.这是规范.
如何根据类的模板创建一个对象
- 类是无法直接使用的,类是抽象的.
- 如果非要使用的话,就必须要找到这个类中的一个具体的存在,找到一个对象.
- 这个对象的特点
a. 拥有类所定义的所有的东东.
b. 这个时候,这个对象就可以直接使用了
- 如何创建1个类的对象
语法格式:
类名 *对象名 = [类名 new];
HMPerson *xiaoMing = [HMPerson new];
这个时候,就根据HMPerson类模板创建了一个xiaoMing对象,类里面有什么对象里面就有什么.
5.xiaoMing对象可以直接使用,如何使用?如何访问对象当中的属性.
对象名->属性名 = 数据;
也可以取值
xiaoMing->_name = @"Jack";
//默认情况下对象当中的属性是不允许在外界访问的.直接这样坐会报错.
//如果就是要访问,就在定义类的地方,属性前面加一个修饰符 @public
- 还可以这样访问,充分说明其实就是结构体
(*对象名).属性名;
(*xiaoMing).name = @"小明";
犯错列表
- 声明和实现的类名要一致 有(前缀)
- @interface下面有1个大括弧,属性写在大括弧中
- 属性一定要以下划线开头,访问的时候也一定要写下划线
- 对象名是个指针变量,所以要遵守变量的命名规范
- 默认情况,对象的属性是不允许外界访问,要加一个@public.
- 为对象的属性赋值,就是为对象的属性变量赋值,类型要一样.
- 类的外部不能直接操作属性(方法中可以),所以要创建对象后为对象的属性赋值.
- 创建类的对象时先写中括号再回去写就有提示了.
9.
方法的实现和调用
类还有行为,行为在类中用方法来表示,和函数特别像
- 类中创建方法来代表类的行为,分两个步骤
1. 方法的声明
写在@interface的大括弧外面
2. 方法的实现
写在@implementation中
- 无参数的方法声明
声明:
- (返回值类型)方法名称;
实现:将方法头拷贝到@implementation中,删除分号,在大括号中写实现
调用:
类中的方法不能直接调用,因为类不能直接实用,如果非要用的话就得创建类的对象.
HMPerson *p1 = [HMPerson new];
//对象当中有类所定义的所有的属性和方法.
[对象名 方法名];
- 带一个参数方法的声明
声明
- (返回值类型)方法名:(参数类型)形参名称;
- (void)eat:(NSString *)foodName;
实现
- (void)eat:(NSString *)foodName
{
NSLog(@"主人你给我的%@真好吃",foodName);
}
调用带一个参数的方法
类中的方法不能直接调用,创建对象以后才能使用
[对象名 方法:实参];
- 带多个参数的方法
声明
- (返回值类型)方法名:(形参类型)形参名1 :(形参类型)形参名2 :(形参类型)形参名3;
- (int)sum:(int)num1 :(int)num2;
实现
- (int)sum:(int)num1 :(int)num2
{
int sum = num1 + num2;
return = sum;
}
调用
[对象名 方法名:实参1 :实参2 :实参3];
int sum = [p1 sum:10 :20];
5. ==使用注意==
- 关于方法的名称
如果方法没有参数,那么方法名字就是方法的名字... eat
如果有参数就是 eat: :
- 带参数的方法的命名规范!!
如果带一个参数
xxxWith:
- (void)eatWith:(NSString*)foodName;
[p1 eatWith:@"红烧肉"];
看起来就像一条完整的语句!
==一个参数最标准的写法==
xxxWithxxx:
- (void)eatWithFood:(NSString)foodName;
[p1 eatWithFood:@"红烧土豆"];
带多个参数的!
xxxWith:(
- (int)sumWith:(int)num1 and:(int)num2;
int sum = [p1 sumWith:10 and:20];
==多个参数最规范的==
xxWith参数1: and参数2: and参数3:
- (void)sumWithNum1:(int)num1 andNUm2(int)num2;
[p1 sumWithNum1:10 andNum2:20];
==最重要的是在调用方法的时候可以看起来是一条完整的语句==