------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -----
第一讲 面向对象编程概念
本小节知识点:
1、【了解】编程的实质是什么?
2、【掌握】面向对象的基本概念
类 包 接口 继承 多态
(
面向过程是强调我们要做一件事情有哪些步骤,
面向对象是强调我们做一件事情的话需要有哪些对象来帮我们完成,每个对象都完成它自己最擅长的东西。
)
1、编程的实质是什么?
软件编程就是将我们的思维转变成计算机能够识别的语言的一个过程。
面向对象是相对面向过程而言。
面向对象和面向过程都是一种思想。
Object Oriented Programming-OOP
思考&实现1:
1)用洗衣机洗衣服用面向过程和面向对象的不同方式理解
面向过程的
打开洗衣机的盖
放水
脱衣服
放肥皂
放衣服
盖上盖子
启动洗衣机
面向对象的
买个洗衣机
洗衣机自己打开盖子
洗衣机放水
人放衣服
洗衣机启动
找个女朋友
让她帮你洗
去饭店吃饭
点菜
自己炒菜
自己端上来
自己吃
自己结账
点菜
厨师炒菜
服务员端上来
你吃
汽车坏了
买工具
自己修车
自己去测试
把车拖到4s店
修车师傅去修
提车
买电脑
自己查
笔记本价格
自己买
自己收货
找小白
给小白老师钱
找小白老师要电脑
面向对象设计三个主要特征
封装性
多态性
继承性
面向对象和面向过程的区别:
面向过程 :
强调的是功能行为
关注的是解决问题需要哪些步骤
面向对象:
将功能封装进对象,强调具备了功能的对象。
关注的是解决问题需要哪些对象
面向对象是基于面向过程的。
面向对象编程:
是一种解决软件复用的设计和编程方法。
优点:
大幅度提高软件项目的成功率
减少维护费
提高可移植性和可靠性
第二讲 类(class)和对象(object)
本小节知识点:
1、【掌握】类(class)和对象(object)
2、【掌握】类的构成
3、【理解】类的抽象
类(class):
类是具有相似内部状态和运动规律的实体的集合(或统称、抽象)。
对象(object):
即指现实世界中各种各样的实体。它可以指具体的事物也可以指抽象的事物。
消息(Message):
消息是指对象间相互联系和相互作用的方式。一个消息主要由5部分组成:发送消息的对象、接收消息的对象、消息传递办法、消息内容(参数)、反馈。
OC中描述事物通过类的形式体现,类是多个同种类型事物的抽象,概念上的定义。
例如:施工图纸,可以看作是房子的类
誰的房子 是 对象
例如:汽车图纸 ,可以看作是类
按照图纸生产的汽车就是 对象
所以图纸(汽车类) 和汽车(汽车对象)
例如:学籍系统:学生类和学生张三、李四之间的关系
所有的学生都有姓名、年龄、班级等信息
我们也可以修改学生的姓名、年龄、班级信息
所以可以把学生的姓名、年龄、班级--->抽象---->学生类的属性
把对学生姓名、年龄、班级的修改和现实---->抽象----->学生类的方法
把学生张三、李四 -------->学生类的对象
总结:
一个类可以实例化多个对象。
类和对象之间的关系
类(class) 一个类由三个部分构成
类的名称:类名
类的属性: 一组包含数据的属性
类的方法: 允许对属性中包含的数据进行操作的方法
对象(object):
是系统中的基本运行实体
对象就是类类型(class type)的变量
定义了一个类,就可以创建这个类的多个对象
一个类就是具有相同类型的对象的抽象
类的构成
人的类设计,只关心3样东西:
事物名称(类名):人(Person)
属性:身高(height)、年龄(age)
行为(功能):跑(run)、打架(fight)
厨师:(CHUSHI )
厨师属性: 姓名 年龄 菜系 级别
行为: 炒菜
修理工:
狗类 类名
名字
性别 属性,特征
毛色
奔跑 方法,行为
叫
3.类的抽象
如何把日常生活中的事物抽象成程序中类?
拥有相同(或者类似)属性和行为的对象都可以抽象出一个类
方法:一般名词都是类(名词提炼法)
坦克发射3颗炮弹轰掉了2架飞机
坦克 炮弹 飞机
发射炮弹
打飞机
小明在公车上牵着一条叼着热狗的狗
人 公交车 狗 热狗
思考&实现1:
1)试着将下面的实体抽象成类 (注意类包括:类名、属性、行为)
老师
类名:Teacher
属性:姓名、年龄、性别、所教的课程 工资 教龄
行为: 上课 批改作业 考试
僵尸
类名:jiangShi
属性:攻击力 血量
行为:跳 吸血
电脑
类名:Computer
属性:品牌 颜色 尺寸 分辨率
行为:看电影 打游戏
车
类名:Car
属性:颜色 *
行为: 开 刹车
学生
类名:Student
属性:姓名、年龄、班级、性别
行为:跷课 谈恋爱 打游戏
第三讲 类的声明和实现
本小节知识点:
1、【理解】关于类的几个名词?
2、【掌握】声明一个类
3、【掌握】实现一个类
在OC中类的定义有两部分:类的声明、类的实现
结构体:
struct Person{
char name[20];
int age;
};
1、关于类的几个名词
类
.h: 类的声明文件,用于声明成员变量、方法。类的声明使用关键字@interface和@end。
注意: .h中的方法只是做一个声明,并不对方法进行实现。也就是说,只是说明一下方法名、方法的返回值类型、方法接收的参数类型而已,并不会编写方法内部的代码。
.m :类的实现文件,用于实现.h中声明的方法。类的实现使用关键字@implementation和@end。
方法
方法的声明和实现,都必须以 + 或者 - 开头
+ 表示类方法(静态方法)
- 表示对象方法(动态方法)
在.h中声明的所有方法作用域都是public类型,不能更改
成员变量(实例变量\属性)
成员变量的常用作用域有3钟:
@public 全局都可以访问
@protected 只能在类内部和子类中访问
@paivate 只能在类内部访问
2、声明一个类
1)声明类使用关键字@interface
2)声明类,我们通常放到.h的头文件中
1 /*
2
3 类:
4
5 一类事物共同特征和行为的抽象
6
7
8
9 大卡车 小轿车 挖掘机
10
11
12
13 车类: Car
14
15 共同的特征: 颜色 速度 *
16
17 共同的行为: 跑 停止
18
19
20
21 对象:
22
23 类的具体的个体
24
25 东风21D(车类的对象)
26
27 解放大卡车(车类的对象)
28
29 BYD(车的对象)
30
31
32
33 2、类的定义
34
35
36
37 结构体定义
38
39 struct Student{
40
41
42
43 };---->定义一个Student结构体
44
45
46
47 类的定义分为两部分:
48
49 1)类的声明(规定当前类的:类名 属性 行为)
50
51 @interface 类名:父类名
52
53 {
54
55 //定义类的属性
56
57 }
58
59 //类的行为
60
61 @end
62
63 2)类的实现(实现具体行为)
64
65 @implementation 类名
66
67 //行为的具体实现
68
69 @end
70
71 */
72
73 #import <Foundation/Foundation.h>
74
75 //车的类
76
77 @interface Car:NSObject
78
79 { 80 81 //类的属性 82 83 int lunzi; //车的* 84 85 //char *color; 86 87 NSString *color; //车的颜色 88 89 int speed; //车的速度 90 91 } 92 93 //类的行为 94 95 @end 96 97 //类的实现 98 99 @implementation Car 100 101 //行为的具体描述 102 103 @end
第四讲 创建一个对象并访问成员变量
接着上面所讲的
1 /*
2
3 在OC中用已经存在的类,如何创建一个对象?
4
5 回顾c结构体,结构体如何创建结构体变量
6
7 struct Student stu; //stu就是结构体变量
8
9 struct Student *pstu; //pstu = &stu;
10
11 结构体指针访问 结构体变量中的成员变量值
12
13 pstu->age = 20; //给 age 设置 值是20
14
15 OC中对象创建
16
17 [Car new];
18
19 //做了三件事情
20
21 //1.向计算机申请内存空间
22
23 //2.给类中的每一个成员初始化值
24
25 //3.返回新申请的空间的首地址
26
27 //理解方式一:
28
29 //定义了一个Car类型的指针变量
30
31 //指针变量指向新申请的内存空间
32
33 //理解方式二:
34
35 //用Car类实例化了一个实例对象,对象的名称是p
36
37 Car *p = [Car new];
38
39 */
40
41 #import <Foundation/Foundation.h>
42
43 //车的类
44
45 @interface Car:NSObject
46
47 { 48 49 //类的属性 50 51 @public 52 53 int lunzi; //车的* 54 55 //char *color; 56 57 NSString *color; //车的颜色 58 59 int speed; //车的速度 60 61 } 62 63 //类的行为 64 65 @end 66 67 //类的实现 68 69 @implementation Car 70 71 //行为的具体描述 72 73 @end 74 75 76 77 int main(int argc,const char *argv[]){ 78 79 @autoreleasepool{ 80 81 //创建Car类型的对象 car1 82 83 Car *car1 = [Car new]; 84 85 //创建一个对象 实质还是指针(用指针间接访问实例变量) 86 87 car1->lunzi = 3; 88 89 car1->speed l= 150; 90 91 car1->color = @"蓝色"; 92 93 // 查看车的信息 94 95 NSLog(@"*: %d,速度: %d,颜色: %@\n",car1->lunzi,car1->speed,car1->color); 96 97 } 98 99 return 0; 100 101 }
第五讲 无参方法声明实现及调用
1 /*
2
3 C语言的函数分类:
4
5 无参无返回值
6
7 无参有返回值
8
9 有参无返回值
10
11 有参有返回值
12
13
14
15 类和对象的概念
16
17 类的定义
18
19 @interface Car:NSObject
20
21 {
22
23 int lunzi;
24
25 int speed;
26
27 NSString *pp;
28
29 }
30
31 //行为
32
33 @end
34
35 对象的创建
36
37 */
38
39 #import <Foundation/Foundation.h>
40
41 //Car类的声明
42
43 @interface Car:NSObject
44
45 { 46 47 int lunzi; //车的* 48 49 int speed; //车的速度 50 51 NSString *pp; //车的颜色 52 53 } 54 55 //行为 56 57 //车跑的方法 方法名是run 58 59 -(void)run; //定义了一个无参无返回值的方法 60 61 -(void)stop; 62 63 @end 64 65 //类的实现 66 67 @implementation Car 68 69 //行为的具体描述 70 71 -(void)run{ 72 73 NSLog(@"车跑在乡间的大道上"); 74 75 } 76 77 78 79 -(void)stop{ 80 81 NSLog(@"咯吱,车停了!"); 82 83 } 84 85 @end 86 87 88 89 int main(int argc,const char *argv[]){ 90 91 @autoreleasepool{ 92 93 //创建Car类型的对象 car 94 95 Car *car = [Car new]; 96 97 //调用方法 98 99 [car run]; 100 101 //调用stop方法 102 103 //向car对象发送stop消息 104 105 [car stop]; 106 107 } 108 109 return 0; 110 111 }
OC中的方法分别为:对象方法和类方法
对象方法
1.对象方法以 - 开头如 -(void) xx;
2.对象方法只能由对象来调用
3.对象方法中可以访问当前对象的成员变量
4.调用格式 [对象名 对象方法名];
5.设计一个学生类和狗类,练习对象方法的使用
类方法
1.类方法以 + 开头 如+(void) put;
2.类方法只能由类来调用
3.类方法中不能访问实例(成员)变量,因为类方法由类来调用,并没有创建存储
空间来存储类中的成员变量
4.调用格式:[类名 类方法名];
5.类方法的好处和适用场合;
不依赖于对象,执行效率更高;
第六讲 有参方法声明实现及其调用
本小节知识点:
1、【掌握】有参方法声明和实现
2、【掌握】方法的调用
1、有参方法声明和实现
2、方法的调用
1 /*
3 C的函数
5 int sum (int x,int y){
7 return x+y;
9 }
10
13 OC的方法
14
15 -(返回值类型)方法名1:(参数类型) 参数名; //有一个参数的方法
16
17 -(返回值类型)方法名1:(参数类型) 参数名1 and:(参数类型2) 参数名2; //有两个参数的方法
18
21 //sum ----> OC的方法
22
23 -(int)sum:(int) x and: (int) y; //方法的声明
24
27 //有参方法的使用注意:
28
29 //方法的类型 (-)对象方法
30
31 //方法的返回值: int 类型
32
33 //方法的参数是: x y
34
35 //参数的类型: 第一个 int 第二个 int
36
37 //方法名: sum: and: (冒号是方法名的一部分)
38
41 //方法的实现
42
43 -(int)sum:(int) x and:(int) y{
44
45 return x+y;
47 }
49 */
53 #import <Foundation/Foundation.h>
54
55 //写一个计算器的类
57 // 类名: Caculator
58
59 //实例变量 num1 num2
60
61 // 行为: + - * /
65 @interface Caculator : NSObject
67 { 69 //实例变量书写规范 71 @public 73 int _num1; //数据类型 _实例变量名 75 int _num2; 77 } 81 //写一个没有参数的方法 83 -(int)sum; //没有参数,返回值是int类型 87 //有参方法的声明 89 -(int)sum: (int) x and:(int) y; 91 @end 92 95 @implementation Caculator 96 97 //方法名 sum 99 -(int)sum{ 100 103 //计算 _num1 + _num2; 105 return _num1 + _num2; 107 } 108 109 //方法名 sum: and: 110 111 -(int)sum: (int) x and:(int) y{ 112 113 return x+y; 115 } 117 @end 118 121 int main (int argc,const char *argv[]){ 122 123 @autoreleasepool{ 124 125 //创建对象 126 127 Caculator *ca = [Caculator new]; 128 131 //对象访问实例变量 133 ca->_num1 = 12; 135 ca->_num2 = 30; 136 139 //调用无参方法 141 int s = [ca sum]; 145 //调用有参的方法 147 s = [ca sum: 34 and: 23]; 149 NSLog(@"s = %d",s); 151 } 153 return 0; 155 }
思考&实现1:
类名:苹果手机(Iphone)
属性:颜色(_color),大小(_size),_cpu
行为:查看本机信息(aboutMyPhone),打电话(call),发短信(sendMessage)
实现该类,并:
1)查看本机信息
2)打电话给10086
3)给10086发短信问联通的客服电话是多少
1 /*
3 类名:苹果手机(iPhone)
4
5 属性:颜色(_color),大小(_size),_cpu
6
7 行为:查看本机信息(aboutMyPhone),打电话(call),发短信(sendMessage)
11 实现该类,并:
12
13 1)查看本机信息
14
15 2)打电话给10086
17 3)给10086发短信问联通的客服电话是多少
19 */
23 #import <Foundation/Foundation.h>
27 typedef enum color{kColorWhite,kColorBlack,kColorTHJ} iColor;
28
29 //iPhone 类的声明
30
31 @interface iPhone : NSObject 33 { 35 @public 37 //类的属性(实例变量、成员变量) 39 //手机的颜色 41 iColor _color; 43 //手机的尺寸 45 float _size; 47 //手机的cpu 49 NSString *_cpu; 51 } 53 //类的方法(方法)的声明 55 //查看手机的信息 实质:把手机的实例变量值打印出来 57 -(void) aboutMyPhone; 59 //打电话,需要一个参数,参数就是一个电话号码 61 -(void) callPhone:(NSString *) telNum; 63 //发短信,给指定号码发送 短信, 短信内容可以指定 65 -(void) sendMessage:(NSString *) telNum andContent:(NSString *) content; 67 @end 69 //iPhone 类的实现 71 @implementation iPhone 73 //查看手机的信息 实质:把手机的实例变量值打印出来 75 -(void) aboutMyPhone{ 77 NSLog(@"颜色: %d,尺寸: %.2f,cpu:%@",_color,_size,_cpu); 79 } 81 //打电话,需要一个参数,参数就是一个电话号码 83 -(void) callPhone:(NSString *) telNum{ 85 NSLog(@"给%@ 打电话!",telNum); 87 } 89 //发短信,给指定号码发送 短信, 短信内容可以指定 91 -(void) sendMessage:(NSString *) telNum andContent:(NSString *) content{ 93 NSLog(@"给 %@ 发送短信,短信内容: %@",telNum,content); 95 } 97 @end 101 int main(int argc,const char *argv[]){ 105 @autoreleasepool{ 106 107 //创建对象 109 iPhone *iphone1Plus l= [iPhone new]; 110 111 //设定手机的信息 113 iphone7Plus->_color = kColorTHJ; 115 iphone7Plus->_cpu = @"A20"; 117 iphone7Plus->_size = 7.9f; 118 121 //调用方法 123 [iphone7Plus aboutMyPhone]; 127 //给10086打电话 129 [iphone7Plus callPhone:@"10086"]; 133 //给10086发短信 135 [iphone7Plus sendMessage:@"10086" andContent:@"您好,请问联通客服电话是多少?"]; 137 } 139 return 0; 141 }
第七讲 类的创建练习
思考&实现1:
一个人可以吃不同的食物,只要吃东西就会增加体重0.6,如果要是出门遛弯,每走100步,体重减0.2,小于100步忽略不计。请用面向对象思想实现。
思路:
类名: Person
属性: 年龄(_age) 体重(_weight)
动作: 吃饭(eat)方法 散步(walk)方法
功能: 人可以吃各种食物
每次散步,让体重-0.2
1 /*
2 类名: Person
3 属性: 年龄(_age) 体重(_weight)
4 动作: 吃饭(eat)方法 散步(walk)方法
5 功能: 人可以吃各种食物
6 每次散步,让体重-0.2
8 */
12 #import <Foundation/Foundation.h>
13 //Person类的声明
14 @interface Person : NSObject
15 { 16 @public 17 //类的实例变量(属性、成员变量) 18 NSString *_name; 19 int _age; //年龄 20 float _weight; //体重 21 } 22 //定义人的行为 23 -(void)eat:(NSString *) foodName; 24 //散步 25 -(void)walk:(int) num; 26 @end 27 28 //Person类的实现 29 @implementation Person 30 //定义人的行为 31 -(void)eat:(NSString *) foodName{ 32 //吃饭以后,体重要在原来的基础上增加0.6 33 _weight += 0.6f; 34 NSLog(@"您吃了%@,当前体重为%.2f",foodName,_weight); 35 } 36 //散步 37 -(void)walk:(int) num{ 38 //每走100步 体重减去0.2 39 //234步 0.4 = 0.2*2 40 //num / 100 *0.2f; 41 _weight -= num/100 *0.2f; 42 NSLog(@"您走了%d步,当前体重为:%.2f",num,_weight); 44 } 46 @end 47 48 int main(int argc, const char * argv[]) 49 { 51 @autoreleasepool { 52 53 //创建对象 54 //[Person new]; 55 //开空间 初始化 返回空间的首地址 56 Person *p = [Person new ]; 57 58 //设置对象的实例变量的值 59 p->_name = @"史泰龙"; 60 p->_weight = 180.0f; 61 p->_age = 18; 62 63 [p eat:@"四川麻辣烫"]; 64 [p eat:@"回锅肉"]; 65 [p walk:234 ]; 66 } 67 return 0; 68 }