黑马程序员-iOS基础-Objective-C基础(二)面向对象思想及类

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

 黑马程序员-iOS基础-Objective-C基础(二)

面向对象思想及类

 一、面向对象思想

1、面向过程/面向对象思想

     面向过程: 关注的是解决问题需要哪些步骤

     面向对象: 关注的是解决问题需要哪些对象

    常用术语

    面向过程 Procedure Oriented

    面向对象 Object Oriented,简称OO

    面向对象编程 Object Oriented Programming,简称OOP

二、类

1、思想

    类和对象的关系

           先设计类,根据类创建对象

    如何设计类(把拥有相同或相似属性和行为的对象抽象出一个类)

          名称,有意义

               1.类名的第一个字母必须大写

               2.不要用下划线

               3.多个英文单词用驼峰标识

          属性

          行为

2、写一个类

 类的声明

作用:声明类的属性、行为

格式:

@interface 类名 : NSObject

{// 声明对象属性(成员变量)

     @public//允许外部访问

}

//方法声明

- (返回值类型)方法名:参数列表;

@end

举例

@interface Person :NSObject
{
	@public
	int age;
	double weight;
}

- (void)walk;
- (void)eat;

@end


 类的实现

指在类的声明部分中声明的类的方法的实现,也即类的方法中所包含的代码

格式:

@implementation 类名

- (返回值类型)方法名
{
      方法体
}

@end


 

  举例  

@implementation Person

- (void)walk
{
	//成员变量作为参数传入不需要在声明中特地写出来,直接使用即可
	NSLog(@"%d岁、%.1f kg的人在走路",age,weight);
}

- (void)eat
{
	NSLog(@"吃了点东西");
}

@end



 3、类的简单内存分析

 内存

        类在内存中也要占一份空间

        在使用类创建对象之前,会将类加载进内存,并且只会加载一次

        内存中只包含类内部的方法列表

 对象

        根据类创建的每一个对象,都有一个isa指针指向创建该对象的类

        调用方法的实质

           对象调用其方法,指该对象根据其内部的isa指针找到创建对象的类,在类中寻找需要调用的方法

           如果有对应方法则执行,并根据需要传入对象本身的成员变量

4、OC对象与函数

 对象成员变量作为函数参数

 指向对象的指针作为函数参数

           修改指向对象的成员

           修改指针的指向

5、类的声明和实现

        @interface和@implementation的分工

              @interface就好像暴露在外面的时钟表面

              @implementation就好像隐藏在时钟内部的构造实现

6、常见错误

         只有类的声明,没有类的实现

         漏了@end

         @interface和@implementation嵌套

         两个类的声明嵌套

        成员变量没有写在括号里面

        方法的声明写在了大括号里面

7、语法细节

        成员变量不能在{}中进行初始化、不能被直接拿出去访问

        方法不能当做函数一样调用

        成员变量\方法不能用static等关键字修饰,别跟C语言混在一起(暂时忽略)

        类的实现可用写在main函数的后面,主要在声明后面就行了

8、OC方法和函数的区别

    OC方法

         对象方法都是以减号-开头

         OC方法只能声明在@interface和@end之间,只能实现在@implementation和@end之间,也就是说OC方法不能独立于类存在

         对象方法只能由对象来调用

         对象方法归类/对象所有

    C函数

        函数能写在文件中的任意位置@interface与@end之间除外,函数归文件所有

       C函数不属于类,跟类没有联系,C函数只归定义函数的文件所有

       函数调用不依赖于对象

       C函数不能直接通过变量名访问OC对象的成员

   低级错误:方法有声明,但是实现的时候写成了函数

9、类的合理设计

不带参数方法

// 方法声明
- (double)pi;
// 方法实现
- (double)pi
{
    return 3.14;
}

      声明

       实现

带参数方法

// 方法声明
- (double)square:(double)number;
// 方法实现
- (double)square:(double)number
{
    return number * number;
}     

         声明

         实现

带多个参数的方法

// 方法声明
- (double)sumOfNum1:(double)num1 andNum2:(double)num2;
// 方法实现
- (double)sumOfNum1:(double)num1 andNum2:(double)num2
{
    return num1 + num2;
}

          声明

 

          实现

方法名注意

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

练习:给Car类设计一个方法,用来和其他车比较车速,返回车速的差距

/*
给Car类设计一个方法,用来和其他车比较车速,返回车速的差距
*/

#import <Foundation/Foundation.h>

@interface Car :NSObject
{
	@public
	int speed;
}

- (int)compareSpeedWithOther:(Car *)other;
@end

@implementation Car

- (int)compareSpeedWithOther:(Car *)other
{
	//speed--当前车的speed
	//other->speed--其他车的speed
	return speed-other->speed;
}


@end

int main()
{
	Car *c1=[Car new];
	c1->speed=300;

	Car *c2=[Car new];
	c2->speed=200;

	int deltaSpeed=[c1 compareSpeedWithOther:c2];
	
	return 0;
}


 

10、匿名对象

 没有名字的对象,很少用

 要求至少能看懂语法

l 属性访问

[Car  new]->speed = 200;

l 方法调用

[ [Car  new]  run];

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值