黑马程序员-----OC学习之类的封装
来源:互联网 发布:电力安装预算软件 编辑:程序博客网 时间:2024/05/24 03:13
1.综述
面向过程(ProcedureOriented)就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
面向对象(ObjectOriented,简称OO)是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
面向过程关注的是解决问题需要哪些步骤;面向对象关注的是解决问题需要哪些对象。
例如,吃饭。面向过程的解决思路是:选菜,买菜,生火,做饭,吃,面向对象的解决思路是,找到服务员点菜,其它的步骤让服务员去解决。
2.类和对象
(1).类和对象的关系
OC中的类相当于图纸,用来描述一类事物。也就是说,要想创建对象,必须先有类;
OC利用类来创建对象,对象是类的具体存在;
面向对象解决问题应该是先考虑需要设计哪些类,再利用类创建多少个对象;
所以我们可以如下理解,对于建造汽车而言,类就相当与建造汽车所用的图纸,汽车的各个部分的零件(对象)是由图纸(类)实例化生成的,我们的零件都是根据图纸得来的。
如何设计一个类?
对于一个类来说,我们只关心类的名称(类名),累的属性(属性)和类的行为(方法)。
类的声明:
成员变量:
@interface的大括号{}中声明的变量:wheels、speed
@interface的大括号和函数的大括号是不一样的
默认会初始化为0
@public可以让Car对象的wheels和speed属性被外界访问
加上:NSObject的目的是让Car类具备创建对象的能力类的实现
创建对象
Car *c = [Car new];用一个指针变量c指向内存中的Car对象。
设置车子对象的属性
跟用指向结构体的指针访问结构体属性一样,用->
c->wheels = 3;
c->speed = 300;
(2).类的声明和实现
@interface和@implementation的分工,可以用下图表示:
如图所示,@interface(类的声明)@interface就好像暴露在外面的时钟表面,我们可以通过指针知道现在具体的时间; @implementation就好像隐藏在时钟内部的构造实现,为什么指针会指到12点?是因为怀表内部的齿轮通过各种运动而产生的,简而言之,我们可以理解声明为告诉编译器,我们有这些东西,而实现则可以理解为这些东西具体的样子和功能等等。
常见错误如下:
l 只有类的声明,没有类的实现
l 漏了@end
l @interface和@implementation嵌套
l 两个类的声明嵌套
l 成员变量没有写在括号里面
l 方法的声明写在了大括号里面
l 成员变量不能在{}中进行初始化、不能被直接拿出去访问
l 方法不能当做函数一样调用
类的实现可用写在main函数的后面,主要在声明后面就行举例说明:
(3).类的方法以及与函数的区别
不带参数的方法
带一个参数的方法声明 调用
带多个参数的方法
方法与函数的区别:
方法
1.对象方法都是以减号 -
2.对象方法的声明必须写在@interface和@end之间
对象方法的实现必须写在@implementation和@end之间
3.对象方法只能由对象来调用
4.对象方法归类\对象所有
函数
1.函数能写在文件中的任意位置(@interface和@end之间除外),函数归文件所有
2.函数调用不依赖于对象
3.函数内部不能直接通过成员变量名访问某个对象的成员变量
(4).封装
@public的成员可以被随意赋值,应该使用set方法和get方法来管理成员的访问(类似机场的安检、水龙头过滤,过滤掉不合理的东西),比如僵尸的生命值不能为负数.
1.set方法
命名规范:
方法都是以set开头,而且后面跟上成员变量名,成员变量名的首字母必须大写
形参名称不要跟成员变量同名
(1)不让数据暴露在外,保证了数据的安全性
(2)对设置的数据进行过滤
2.get方法
作用:返回对象内部的成员变量命名规范:get方法的名称一般就跟成员变量同名
3.成员变量的命名规范
成员变量都以下划线 _ 开头可以跟get方法的名称区分开
可以跟其他局部变量区分开,一看到下划线开头的变量,肯定是成员变量。
4.self关键字
Self是一个指针,谁调用了当前方法,self就指向谁。
【出现在对象方法中,就代表着当前对象,出现在类方法中,就代表着当前类】
Self的用途:
(1)可以利用self->成员变量名访问当前对象内部的成员变量(仅在对象方法中)
(2)[self 方法名];可以调用其他的对象方法或者是类方法。
- 黑马程序员-----OC学习之类的封装
- 黑马程序员-----OC学习之类的继承和多态
- 黑马程序员-----OC学习之类与对象
- 黑马程序员--OC之类的封装继承多态使用技巧
- OC学习笔记之类的封装
- 黑马程序员—OC学习之类和对象
- 黑马程序员------oc语言学习笔记之类和对象
- 黑马程序员——OC学习之类的声明和实现
- 黑马程序员--OC封装
- 【黑马程序员】-oc中对象的封装
- 黑马程序员——OC学习之类的本质和常用的继承自NSObject的方法
- 黑马程序员-OC语言-封装
- 黑马程序员-OC学习笔记-----封装、继承、多态
- 黑马程序员-ios学习笔记 oc 封装
- 黑马程序员——ios学习笔记 OC 封装&多态
- 黑马程序员-[OC]学习之旅-封装、继承
- 【黑马程序员】-我的OC学习笔记(2)-封装、继承、多态
- OC学习之类的进阶
- edm+pmta遇到端口号被占用,以及浏览器无权限访问
- 【九】面向对象的相关概念
- JVM优化与内存管理笔试题
- 网络测试Ping命令
- LeetCode OJ 之 Longest Substring Without Repeating Characters 解题报告
- 黑马程序员-----OC学习之类的封装
- Skia源码点滴
- js编码java后台解码
- java List 2个List 合并后去重, 或单个List 去重
- Activity的onPause()官方文档翻译
- dm368用的mt9p031 sensor datasheet名词详解
- 编程这几天出现的很2的问题!!!
- Android中外部程序调用方法总结
- USACO 2008 Dec Silver 1.Hay For Sale