黑马程序员——OC语言——类和对象

来源:互联网 发布:人工智能创造新就业 编辑:程序博客网 时间:2024/05/21 20:30

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

一、面向对象

(一)、面向对象

概念:面向对象(object-oriented ;简称: OO) 至今还没有统一的概念,我这里把它定义为: 按人们认识客观世界的系统思维方式,采用基于对象(实体)的概念建立模型,模拟客观世界分析、设计、实现软件的办法。通过面向对象的理念使计算机软件系统能与现实世界中的系统一一对应。

(二)、面向对象编程
概念:是一种解决软件复用的设计和编程方法。这种方法把软件系统中相近相似的操作逻辑和操作应用数据、状态,以类的型式描述出来,以对象实例的形式在软件系统中复用,以达到提高软件开发效率的作用。

            优点:

        (1)大幅度提高软件项目的成功率;

        (2)减少维护费;

         (3)提高可移植性和可靠性。

(三)面向对象编程的三大特征:封装性、多态性、继承性。

(四)面向对象和面向过程的区别:

(1)面向过程:强调的是功能行为,关注的是解决问题需要哪些步骤。

(2)面向对象:将功能封装进对象,强调具备了功能的对象,关注的是解决问题需要哪些对象,面向对象是基于面向过程的。

二、类

(一)类的概念

类是具有相似内部状态和运动规律的实体的集合(或统称、抽象)。

(二)类的声明

(1)声明类使用关键字@interface

(2)声明类,我们通常放到.h的头文件中

//车的类的声明@interfaceCar:NSObject{   //类的属性    int lunzi; //车的轮子    NSString *color;//车的颜色    int speed; //车的速度}   //类的行为@end

(三)类的实现

(1)实现一个类 使用关键字:@implementation

(2)实现一个类通常放到.m的文件中

(3)实现类主要是对方法的具体实现

//类的实现@implementationCar//行为的具体描述@end

三、对象

(一)对象的概念

对象(object): 即指现实世界中各种各样的实体。它可以指具体的事物也可以指抽象的事物。在面向对象概念中我们把对象的内部状态称为属性、运动规律成为方法或事件。

(二)对象的创建

我们用类的方式告诉了计算机我们需要一个什么样的对象,之后我们要在程序中使用这个对象,就必须先创建一个对象

   //创建Car类型的对象 car1   Car *car1=[Car new];

在内存中干三件事:

(1)开辟存储空间

(2)初始化成员变量 写在类声明大括号的属性叫成员变量(实例变量)

(3)返回指针地址

(三)访问对象的成员变量

   //创建Car类型的对象 car1        Car *car1=[Car new];        //创建一个对象 实质还是指针 (用指针间接访问实例变量值)        car1->lunzi = 3;        car1->speed = 150;        car1->color = @"蓝色";               //查看车的信息        NSLog(@"轮子:%d,速度:%d ,颜色:%@",car1->lunzi,car1->speed,car1->color);

通过 对象->对象成员(注意声明属性为:@public)的方式操作对象中的成员, 对其中一个对象的成员进行了修改。和另一个对象没有关系。

四、类方法和对象方法

(一)对象方法

(1)对象方法以-开头如-(void)eat;

(2)对象方法只能由对象来调用

(3)对象方法中可以访问当前对象的成员变量

(4)调用格式 [对象名 对象方法名];

类方法

(1)类方法以+开头 如+(void)put;

(2)类方法只能由类来调用

(3)类方法中不能访问实例(成员)变量,因为类方法由类来调用,并没有创建存储空间 来存储类中的成员变量。

(4)调用格式:[类名 类方法名];

(5)类方法的好处和适用场合:

     不依赖于对象,执行效率更高;

     能用类方法解决的问题,尽量使用类方法;

     场合:当方法内部不需要使用到成员变量时,可以改为类方法。

五、方法的调用

(一)无参方法声明实现及调用

 #import <Foundation/Foundation.h>//Car类的声明@interfaceCar:NSObject{    int lunzi;    int speed;    NSString *pp;}//行为//车跑得方法   方法名是run-(void)run;   //定义了一个无参无返回值的方法-(void)stop;@end//类的实现@implementationCar//方法的具体的实现-(void)run{    NSLog(@"车跑在乡间的大道上");}-(void)stop{    NSLog(@"咯吱,车停了!");}@endint main(intargc, const char * argv[]) {    @autoreleasepool {        //创建了一个对象 对象名 car        Car *car = [Car new];        //调用方法        [car run];        //调用stop方法        [car stop];    }    return 0;}

(二)有参方法的声明实现及调用

 #import <Foundation/Foundation.h>//写一个计算器的类// 类名:Caculator// 实例变量  num1 num2@interfaceCaculator : NSObject{    //实例变量书写规范    @public    int _num1; //数据类型  _实例变量名    int _num2;}//写一个没有参数的方法-(int)sum;  //没有参数,返回值是int类型//有参方法的声明-(int)sum:(int)x and:(int) y;@end@implementationCaculator//方法名 sum-(int)sum{   //计算 _num1 + _num2;    return _num1 + _num2;}//方法名 sum: and:-(int)sum:(int)x and:(int) y{    return x + y;}@endint main(intargc, const char * argv[]) {    @autoreleasepool {        //创建对象        Caculator *ca = [Caculator new];        //对象访问实例变量        ca->_num1 = 12;        ca->_num2 = 30;        //调用无参方法        int s = [ca sum];        //调用有参的方法        s = [ca sum:34 and:23];        NSLog(@"s = %d",s);    }    return 0;}

 


0 0
原创粉丝点击