黑马程序员_ios基础总结8_OC面向对象

时间:2023-02-18 17:50:25
---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

什么是面向过程?

面对的是过程,我们关注的是过程过程就是函数。在面向过程编程中,我们总是会考虑如何是实现函数、如何调用函数。比如:调用函数打印三角形调用函数让车子跑起来调用函数让学生学习

面向过程例子(把大象放冰箱)

•调用函数【打开冰箱】来打开冰箱•调用函数【放入大象】来把大象放入冰箱•调用函数【关闭冰箱】来关闭冰箱

什么是面向对象?

面对的是对象,我们关注的是对象我们生活中,一切都是对象。在面向对象的编程中,你考虑的是如何实现对象,如何调用对象。比如绘制对象来绘制三角形汽车开动学生学习

面向对象例子(把大象放冰箱)调用对象【冰箱】的方法【开门】来打开冰箱门调用对象【冰箱】的方法【放入大象】来把大象放入冰箱调用对象【冰箱】的方法【关门】来关闭冰箱门

面向对象和面向过程的区别

面向过程关注的是解决问题需要哪些步骤(函数)

面向对象关注的是解决问题需要哪些对象没有开发经验很难感受到它们的区别,两种思想都能达到解决问题的目的,但是解决思路不一样

常用术语

面向过程 ProcedureOriented面向对象 ObjectOriented,简称OO面向对象编程 Object Oriented Programming,简称OOP

OC中的面相对象

OC中的类相当于图纸,用来描述一类事物。也就是说,要想创建对象,必须先有类OC利用类来创建对象,对象是类的具体存在因此,面向对象解决问题应该是先考虑需要设计哪些类,再利用类创建多少个对象

类的声明

代码编写定义一个Person类,拥有2个属性:年龄、血型,1个行为:跑类名\属性的命名规则:标示符的规则类名的命名规范:有意义、驼峰标识、首字母大写
#import <Foundation/Foundation.h>
// 类的声明
@interface Person : NSObject
{
@public
int age; // 年龄
char boold; // 血型
}
- (void)run; // 跑的行为
@end


成员变量

–@interface的大括号{}中声明的变量:wheels、speed–@interface的大括号和函数的大括号是不一样的–默认会初始化为0@public–@public可以让Car对象的wheels和speed属性被外界访问NSObject–加上:NSObject的目的是让Car类具备创建对象的能力

类的实现

// 类的实现
@implementation Person
- (void) run
{
NSLog(@"%d岁,血型为%c的人跑起来了", age, boold);
}
@end


创建对象

// 主函数
int main()
{
// 创建人对象
Person *p = [Person new];
p->age = 22;
p->boold = 'A';

[p run];
return 0;
}



main函数的代码分析、内存分析(对象在内存中有成员)[Person new]每次都会创建出新的对象,并且返回对象的地址,那么就应该用一个指针变量保存对象的地址Person *p = [Person new];用一个指针变量p指向内存中的Person对象设置人对象的属性跟用指向结构体的指针访问结构体属性一样,用->–p->age = 22;–p->boold = 'A'; 

创建多个Car对象

分别只设置wheels、speed属性
Person *p1 = [Person new];
p1->age = 22;
Person *p2 = [Person new];
p2->boold = 'B';
[p1 run];

1个赋值给另一个,然后修改属性
Person *p1 = [Person new];
p1->age = 88;
p1->boold='C';
Person *p2 = p1;
p2->age = 100;
[p1 run];

面向对象封装的好处

更加接近人类的思考方式只需要关注对象,不需要关注步骤

对象与函数参数

对象成员变量作为函数参数指向对象的指针作为函数参数修改指向指向对象的成员修改指针的指向(指向某对象的指针即指针的指针)

@interface和@implementation的分工

@interface就好像暴露在外面的时钟表面@implementation就好像隐藏在时钟内部的构造实现

常见错误

只有类的声明,没有类的实现漏了@end@interface和@implementation嵌套两个类的声明嵌套成员变量没有写在括号里面方法的声明写在了大括号里面

OC方法和函数的区别

OC方法只能声明在@interface和@end之间,只能实现在@implementation和@end之间。也就是说OC方法不能独立于类存在C函数不属于类,跟类没有联系,C函数只归定义函数的文件所有低级错误:方法有声明,但是实现的时候写成了函数

OC的方法注意

方法只有声明,没有实现(经典错误)方法没有声明,只有实现(编译器警告,但是能调用,OC的弱语法)编译的时候:访问没有的成员变量直接报错,访问没有的方法,只是警告

@implementation

没有@interface,只有@implementation,也是能成功定义一个类的
@implementation Car : NSObject
{
@public
int wheels; // 多少个*
int speed; // 时速
}
- (void) run
{
NSLog(@"%i个*,%i时速的车子跑起来了", wheels, speed);
}
@end

@implementation中不能声明和@interface一样的成员变量

不带参数的方法

//方法声明
- (double)pi;
//方法实现
- (double)pi{
return 3.14;
}
//方法调用
[c pi];

带一个参数的方法

一个计算平方的方法
//方法声明
- (double)square:(double)number;
//方法实现
- (double)square:(double)number{
return number * number;
}
//方法调用
[c square: 10];

带多个参数的方法

一个计算和的方法
//方法声明
- (double)sumOfNum1:(double)num1 andNum2:(double)num2;
//方法实现
- (double)sumOfNum1:(double)num1 andNum2:(double)num2{
return num1+num2;
}
//方法调用
[c sumOfNum1: 10 andNum2: 21];

方法名注意

冒号也是方法名的一部分同一个类中不允许两个对象方法同名




---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------