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

本文介绍了面向对象编程的基本概念,包括面向对象与面向过程的区别、类和对象的定义与使用、方法的声明与调用等内容,并通过示例展示了如何在程序中实现面向对象的设计。

------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(@"咯吱,车停了!");
}
@end
int 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;
}
@end
int 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;
}

 


标题基于Python的自主学习系统后端设计与实现AI更换标题第1章引言介绍自主学习系统的研究背景、意义、现状以及本文的研究方法创新点。1.1研究背景与意义阐述自主学习系统在教育技术领域的重要性应用价值。1.2国内外研究现状分析国内外在自主学习系统后端技术方面的研究进展。1.3研究方法与创新点概述本文采用Python技术栈的设计方法系统创新点。第2章相关理论与技术总结自主学习系统后端开发的相关理论技术基础。2.1自主学习系统理论阐述自主学习系统的定义、特征理论基础。2.2Python后端技术栈介绍DjangoFlask等Python后端框架及其适用场景。2.3数据库技术讨论关系型非关系型数据库在系统中的应用方案。第3章系统设计与实现详细介绍自主学习系统后端的设计方案实现过程。3.1系统架构设计提出基于微服务的系统架构设计方案。3.2核心模块设计详细说明用户管理、学习资源管理、进度跟踪等核心模块设计。3.3关键技术实现阐述个性化推荐算法、学习行为分析等关键技术的实现。第4章系统测试与评估对系统进行功能测试性能评估。4.1测试环境与方法介绍测试环境配置采用的测试方法。4.2功能测试结果展示各功能模块的测试结果问题修复情况。4.3性能评估分析分析系统在高并发等场景下的性能表现。第5章结论与展望总结研究成果并提出未来改进方向。5.1研究结论概括系统设计的主要成果技术创新。5.2未来展望指出系统局限性并提出后续优化方向。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值