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

面向对象

一、面向对象的思想

C语言是面向过程,OC是面向对象,那么什么是面向对象呢?面向对象和面向过程的区别可以通过视频课程中形象的例子来体会。

1.以用电脑听歌为例子:

面向过程:

打开电脑

播放电脑中的歌曲

关闭电脑

面向对象:

电脑

开机

播放歌曲

关机

区别分析:

面向过程关注的是解决问题需要哪些步骤;面向对象关注的是解决问题需要哪些对象,两种思想都能达到解决问题的目的,但是解决思路不一样

2.现实生活中面向对象的例子

想打电话\发短信à 找手机,不用分析电话要怎样才能拨通

去饭店吃饭 à 找服务员,不用分析怎么到厨房炒菜

汽车坏了 à 找汽车维修工,不用分析修车的步骤

万物皆对象

3.常用术语

面向过程 ProcedureOriented

面向对象 ObjectOriented,简称OO

面向对象编程 ObjectOriented Programming,简称OOP

二、类和对象的关系

1.如何创建对象

面向对象解决问题的时候必须有对象,那如何创建对象呢?

例如创建一个汽车对象:

需要先有汽车的建造图纸,图纸上描述清楚汽车应该具备的属性和功能(行为)

属性:轮子数、时速

功能(行为):跑

然后再根据图纸上的描述生成汽车

所以现在知道OC的面相对象:

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

2如何设计类

类的设计有三个方面:

事物名称(类名):车(Car)

属性:轮子数(wheels)、时速(speed)

行为(功能):跑(run)

注意:类名首字母大写,不能有下划线,多个单词使用驼峰标识。拥有相同(或者类似)属性和行为的对象都可以抽像出一个类

三、类的声明和实现

还是以车为例:定义一个Car类,拥有2个属性:轮子数、时速,1个行为:跑

要描述OC中的类分2大步骤:类的声明、类的实现(定义)。跟函数类似,函数有分声明和定义

1.类的声明:

一般形式为:

@interface 类名

成员变量1;

成员变量2;

.......

-(方法类型)方法名;

@end

#import<Foundation/Foundation.h>@interface Car :NSObject
{@publicint wheels; // 多少个轮子int speed; // 时速
}
- (void)run; // 跑的行为
@end

1> 成员变量

@interface的大括号{}中声明的变量:wheels、speed

@interface的大括号和函数的大括号是不一样的

默认会初始化为0

2> @public

@public可以让Car对象的wheels和speed属性被外界访问

3> NSObject

NSObject其实是一种基类,加上:NSObject的目的是让Car类具备创建对象的能力

4> -(void)的“-”代表是对象方法,对象可以调用,类不可以。

2.类的实现

一般形式:

@implementation 类名

- (方法的类型)方法名

{

方法的具体实现;

}

@end

@implementation Car
- (void) run
{NSLog(@"%d个轮子,%d时速的车子跑起来了",wheels, speed);
}
@end

3.创建对象

int main()
{// 创建车子对象Car *c = [Car new];c->wheels = 4;c->speed = 200;[c run];return 0;
}

main函数的代码分析、内存分析(对象在内存中有成员)

[Car new]每次都会创建出新的对象,并且返回对象的地址,那么就应该用一个指针变量保存对象的地址。

Car *c = [Car new];

用一个指针变量c指向内存中的Car对象

设置车子对象的属性

跟用指向结构体的指针访问结构体属性一样,用->

c->wheels = 4;

c->speed = 200;

四、常见错误

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

2.漏了@end

3.@interface和@implementation嵌套

4.两个类的声明嵌套

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

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

五、语法细节

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

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

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

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

黑马程序员——OC语言------类的声明实现、面向对象相关推荐

  1. 黑马程序员——OC语言基本语法知识(一)

    *** 封装 *** 一. set方法 通过 指针->成员变量名 方式给成员变量赋值具有危险性, 可能被赋值为不合理的数值.不允许通过指针直接修改成员变量, 就要去掉@public. 通过方法来 ...

  2. 黑马程序员C语言基础(第五天)运算符与表达式、程序流程结构、数组和字符串、函数

    https://www.bilibili.com/video/BV15W411K7k6?p=93&spm_id_from=pageDriver 黑马程序员C语言基础(第五天)运算符与表达式.程 ...

  3. 黑马程序员--OC之Foundation框架的使用

    黑马程序员--OC之Foundation框架的使用 ------- <a href="http://www.itheima.com" target="blank&q ...

  4. 黑马程序员C语言基础(第八天)复合类型(自定义类型)(结构体)、共用体(联合体)、枚举enum、 typedef

    黑马程序员C语言基础(第一天) 黑马程序员C语言基础(第二天) 黑马程序员C语言基础(第三天) 黑马程序员C语言基础(第四天)数据类型 黑马程序员C语言基础(第五天)运算符与表达式.程序流程结构.数组 ...

  5. 黑马程序员C语言基础(第七天)内存管理

    黑马程序员C语言基础(第一天) 黑马程序员C语言基础(第二天) 黑马程序员C语言基础(第三天) 黑马程序员C语言基础(第四天)数据类型 黑马程序员C语言基础(第五天)运算符与表达式.程序流程结构.数组 ...

  6. 黑马程序员C语言基础(第三天)

    黑马程序员C语言基础(一)第三天 https://www.bilibili.com/video/BV15W411K7k6?p=40 文章目录 低级语言与高级语言 c语言优缺点 c语言应用领域 通过gc ...

  7. 黑马程序员——c语言学习心得——函数传递二维数组

    黑马程序员--c语言学习心得--函数传递二维数组 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.定义指针的时候一定要初始化.    变量 ...

  8. 黑马程序员-----集合框架类(四) 高级for循环、方法的可变参数及静态导入

    ------- android培训.java培训.期待与您交流! ---------- 黑马程序员-----集合框架类(四) 高级for循环.方法的可变参数及静态导入 1.1 高级for循环(示例1) ...

  9. 黑马程序员 oc对象的方法成员变量

    -----------黑马程序员 IOS培训.Android培训.Java培训.期待与您交流---------------- #import <Foundation/Foundation.h&g ...

最新文章

  1. CoreAnimation —— CATransaction(隐式动画)
  2. SQL语句 - 嵌套查询
  3. 古老的SSM企业级应用
  4. 元器件基础知识--排阻命名
  5. GVIM编辑器的配置
  6. linux网络编程之Socket编程
  7. 文件夹没有安全选项-文件上传下载-路径访问被拒绝
  8. 线程相关函数(1)-pthread_create(), pthread_join(), pthread_exit(), pthread_cancel() 创建取消线程...
  9. 卡巴斯基网络安全解决方案-服务器虚拟化安全2.0安装方法,卡巴斯基网络安全解决方案-协作服务器.PDF...
  10. eclipse汉化包
  11. Android实现一个APP只能在一部手机上使用
  12. pulseaudio如何开通系统日志来debug
  13. 廊坊金彩教育:如何提高店铺评分
  14. 0. crash和kdump 死机问题解决-x86_64-基础知识
  15. NVDIMM编程模型原理大概推导梳理
  16. Ubuntu 22.04 桌面美化之Mac Big Sur风格
  17. HM代码阅读3:AMVP候选填充函数Void TComDataCU::fillMvpCand ()
  18. NCC轻量化开发数据结构总结
  19. 介绍一位超级大美女的经历!
  20. react的ref三种用法

热门文章

  1. ssm项目笔记(五)图片存储方案
  2. TPM分析笔记(七)TPM 模块中的密码算法家族。
  3. h5发送短信以及判别用户浏览器版本
  4. (转载)Bro NIDS的安装与配置
  5. 贪心算法——埃及分数问题
  6. IP、网关、端口、网段、子网掩码概念区别
  7. 优化距离计算函数的matlab实现
  8. 如何启动一个vue项目
  9. 2020-12-12
  10. 虚拟机的防火墙设置指令