黑马程序员_OC面向对象思想和类的创建
来源:互联网 发布:电子烟发热丝数据 编辑:程序博客网 时间:2024/05/18 01:25
<span style="font-size:18px;"></span>
(一)面向对象
面向对象,不仅是一种变成技术,更是一种编程思想,是学好OC的一种重要思想。而C语言是面向过程编程,两者截然不同。下面为两种思想的缩写。
OOP:Object Oriented Programming-->面向对象编程。
OO:Object Oriented -->面向对象。
Procedure Oriented-->面向过程。
现在来分析一个实例;
我想用羽毛球拍打球:
1.C语言:C语言侧重解决问题的步骤,我-->拿起来羽毛球牌-->打球-->打球结束放下羽毛球拍。执行实例都是一步一步
的完成,你让我怎么做我就按照顺序来做,旨在解决问题的步骤。
2.OC语言:OC语言面向对象,万物皆对象,我只需要找对象,不用分析做这件事的步骤,谁具备我需要的功能,我就
能找到一个相应的对象来实现我的功能。我想用羽毛球拍打球,那我就找到羽毛球拍,执行羽毛球拍的打球功能,至于
功能怎样实现,与我无关。这就是一种面向对象的想。
再看一个实例:
我电脑坏了,要修理:
1.C语言:我-->打开电脑-->开机-->检测硬件是否坏了-->检测系统是否坏了-->维修-->关机。
2.OC语言:我-->找到维修工,维修工具备我需要的功能,我找到维修工这个对象-->调用维修工的修理功能修好电脑。
我无需再分析修电脑的步骤和过程。
总结:面向对象和面向过程是两种不同的思想。都能解决问题,但是两者思路截然不同。面向对象更符合人的思路,需
要什么就找什么,需要什么方法就找什么方法。而不是一大堆都自己来做。这是一种较为先进的思想。
注:其实OC的本质还是面向过程。只是苹果给它加了一件面向对象的衣服。OC的本质是结构体。
( 二)类和对象
既然万物皆对象。但是要实现在代码中,还需要说明一个类。类好像是一类对象的整体统称,又好像是”图纸“和”产物“之
间的关系。有类才有对象。想要创建对象必须要创建类。类的创建分为三个步骤。
1.类的名称
类的名称一般首字母大写,要取的有意义。例如人这个类,就可以定义为Person。车类定义为Car。
2.类的成员变量(实例变量/属性)
类的属性就是说明这个类拥有什么共同的点。例如Person人这个类,人都拥有年龄,身高,体重。这些都可以是属性。
3.类的方法(行为/功能)
说明类具有哪些行为,例如Person人这个类具有吃法,跑步,睡觉等行为。
这三个步骤在代码的实现中,可以规划成两个步骤,类的声明和实现(定义),下面由代码延伸出今日所学的关键字用法
和类的创建说明。
<span style="font-size:18px;">#import <Foundation/Foundation.h>@interface Student : NSObject{ tring *_nam@public int _no; NS Se;}- (void)study;@endvoid)study{ NSLog( void)study { NSLog( @implementation Student - (@"学号为%d的%@学生正在学习",_no,_name); } @end int main() = { Student *s = [Student new]; s->_no 100; s->_name=@"梁萧"; [s study]; return 0; }</span>
(1)类的成员变量(实例变量/属性)声明:用@interface 类 :NSObject后面的{}来实现定义,如上述代码的int _no;和
NSString *_name。其实也可以定义@implementation和@end之间,只不过用的较少。@interface Student : NSObject
这段代码的意思是创建一个 Student类,继承自NSObject(它的父类/超类是NSObject-----一个OC最基本的类)。然后
下面的大括号定义属性。
<span style="font-size:18px;">@interface Student : NSObject{@public int _no; NSString *_name;}- (void)study;@end</span>
(2)类的方法的声明:规则都是- (返回值)方法/行为;其实以-开头的都是对象方法,只能够通过对象来调用。如下实
现了一个简单的study方法的声明。声明后要进行方法的实现。
- (void)study;
(3)类方法的实现:OC的方法的实现比较特殊,都是在@implementation和@之间完成方法的实现。实现要求定义出
这个方法具体做了什么。如刚才声明了一个study方法,则要实现它,输出当前对象的学号和姓名。
<span style="font-size:18px;">@implementation Student- (void)study{ NSLog(@"学号为%d的%@学生正在学习",_no,_name);}</span>
至此我们完成了一个类完整的成员变量的声明,方法的声明和实现。下面有几点注意点:
①:类名首字母必须大写,且不能有下划线,可以用驼峰标示。
②:谁清楚这个行为怎么做,就应该把这个行为放到哪个类。
③:一个完整的类,应该拥有类的声明,属性和行为(实现)。
④:[ ]是OC中得一种行为,涉及到执行操作,都需要[行为执行者 行为名称 ]
⑤:若要想类具有创建对象的能力,则要让类继承NSObject。NSObject也是一个类,定义在Foundation框架中。
⑥:定义好的成员变量默认初始值为0.并且成员变量也叫实例变量,属性。不可以在@interace中直接对成员变量赋
值。
⑦:定义成员变量时出现了@public-->这是成员变量的一种作用域。代表任何地方都可以直接访问。成员变量一共有四
种作用域。
@private-->私有变量,只能在当前类的对象方法中直接访问。
@protected-->可以在当前类和子类的对象方法中直接访问。
@public-->任何地方都可以访问,包括main主函数。
@package-->同一个框架内可以访问。
⑧:OC方法定义和实现中,( )只有一个作用,就是括住数据类型。
⑨:OC的消息机制:[ Student * study ];表示给Student这个类型的指针所指向的对象发送一个study消息。执行后,就
会直接找run方法的实现。
我们可以发现,一个@interface和一个@end对应,一个@implementation和一个@end对应,两者是不能互相嵌套的,
会与最近的@end组成配对。而且@interface就像是钟表的外表,@implementation就像钟表内部的运转原理。
(4)完成了类的声明和实现后,可以在main函数中创建类的新对象。采用[类 new]方法来创建对象(new是NSObject
的一个方法,因为Student继承NSObject这个类,所以可以使用此方法)。
Student *s = [Student new];s->_no = 100;
[s study];
s->_name=@"梁萧";
在OC中,方法,变量的改动都是需要依靠指针的。现在通过Student new方法创建出了一个新对象,让Student *类型的
指针存储这个对象。通过指针s,我们就可以进行成员变量的修改。通过->来更改。随后执行对象方法study,同样的,[
]左边是调用者,右边是消息。[s study];对象每次创建[Student new]都会分配新的存储空间。而类是只有一个的,内
存中也只有一个类,可是可以有无数个这个类的对象。当第一次使用类创建对象时,会把类加载到内存,内存里的类只
存放方法的声明。下面我们把程序运行下。输出:
学号为100的梁萧学生正在学习
至此 我们创建了一个完整的类,并且在主函数中调用成功。类和对象的创建完成。
(5)方法与函数的区别:
对象方法都是以-开头的,且声明必须写在@interface和@end之间,定义必须写在@implementation和@end之间。顾
名思义,对象方法只能由对象来调用。而函数是任意调用的,可以写在文件的任意位置,甚至是@implementation和
@end中。并且函数名后面都会加一个()来传入形参。函数和方法是毫无关系的。
(6)方法的声明与调用细节:
由于对象方法只能由对象调用,所以左边放的是指向对象的指针,右边是刚才设计好的方法,传入应有的参数,完成方
法的实现调用。
(7)类的设计:
1.类的成员变量不仅可以是int,double,也可以是char *(OC中多使用NSString *),甚至是结构体和枚举,这些都可
以当做基本的实例变量。
<span style="font-size:18px;">typedef enum { SexMan, Sexwoman} Sex;typedef struct{ int day; int year; int month;} Date;@interface Person : NSbject{ Sex _sex; Date _birthday;}</span>
2.枚举和结构体用作成员变量时,定义名字要做到有意义。枚举{ }内的常量首单词要用枚举名,并且使用驼峰标示命
名。结构体只有在初始化时候才能{ }依次赋值。
3.OC方法中,一个参数对应一个冒号。冒号也是方法名的一部分。
- (void) pingfang;- (void) pingfang:(int)num;
如上,第一个对象方法名称为pingfang,第二个对象方法名称为pingfang:
4.对象方法和类方法是允许同名的,他们是两种不同的方法。
- (void) pingfang;+ (void) pingfang;
(8)匿名对象:不用指针存放对象。单纯就是[[Student new] study],这种方法是不推荐的。因为每一次都是一个新的
new,开辟了一个新的空间存储对象。无法存储或者得到想要的结果。至此,OC的类和方法的基本创建和一些课程知
识点总结完毕。熟练地掌握上面的知识才能更好地完成下面的OC学习。共勉!!
- 黑马程序员_OC面向对象思想和类的创建
- 黑马程序员_OC面向对象的特性
- 黑马程序员学习笔记_OC之面向对象思想
- 黑马程序员_OC面向对象之类和对象基础
- 黑马程序员_OC面向对象之继承和多态
- 黑马程序员_OC中类的创建
- 黑马程序员_OC语言的面向对象特性
- 黑马程序员_OC面向对象的三大特性
- 黑马程序员_OC面向对象的三大特性之封装及OC中类方法和self的使用
- 黑马程序员_OC基础02_类和对象
- 黑马程序员_OC基础02_类和对象
- 黑马程序员_面向对象的思想
- 黑马程序员--面向对象的设计思想
- 黑马程序员_OC之类和对象
- 黑马程序员-类与面向对象的思想
- 黑马程序员_OC中对象的复制
- 黑马程序员_OC对象的描述
- 黑马程序员_OC对象的构造
- 1.tcp/ip 协议分析-综述
- Swift中的get和set
- 习题2.30
- POJ3321 线段树,树状数组 建树经典题
- 【数据结构之二叉树】(二)B+树比B树更适合做文件索引的原因
- 黑马程序员_OC面向对象思想和类的创建
- 导数的定义
- mvc与三层结构终极区别
- 基于VS应用开发的WinCE和PC机的区别
- 无懈可击,愚人节不愚人---4月1日
- 线程池ThreadPoolExecutor使用简介
- TcxTreeList显示复选框
- MariaDB数据库由于访问量过多而不能连接
- isap sap 模板