您的位置:首页 > 职场人生

【黑马程序员】-我的OC学习笔记(1)-类

2015-11-15 21:42 579 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

Object-C是在C语言的基础之上发展来的一门支持面向对象的语言,可以说OC是C语言的超集。关于基本的基础变量类型、循环、条件判断等知识点与C并没有较大的差别。OC支持面向对象的程序设计,因此我们学习OC语言的最重要的第一个关注点就是面向对象的特性。

 一、什么是面向对象

  对于什么是面向对象,在我的学习过程中我是这么理解的:面向对象首先是一种程序设计过程当中我们所采用的一种思维设计方法,理解面向对象应当与传统C语言的面向过程思维方式对照理解。传统的程序设计过程中,特别是C语言程序的编写,我们会采用一种面向过程的编程思维。面向过程的思维注重的是在完成一个功能的过程中,我应该怎样做好每一步,我应该思考的是我怎么实现每一步的具体实现,然后最终实现需要的功能。而面向对象的思维方式与此有着很大的不同,面向对象讲求万事万物皆对象,我们应该首先理解我们要涉及哪些对象,然后以每个对象所具有的属性与操作出发将各对象联系起来共同完成期望的功能。举个例子来说:网上经常看到说把一个大象塞进冰箱需要几步?以一个面向过程的思维方式来看:我们需要打开冰箱门、把大象塞进冰箱、关上冰箱门,面向过程的思维方式注重的就是每步我们应该做什么。而以一个面向对象的思维方式我们将会这么思考:我们有三个对象:人、大象、冰箱,人有体重、年龄等等属性,但最重要的是人有一个放东西的操作,大象也有体重、年龄等等属性,冰箱有容积等属性,而且冰箱有存储东西、打开冰箱、关闭冰箱的操作。当我们思考如何将大象放进冰箱时应该这么做,首先使用人调用打开冰箱的操作,再调用人放东西的操作将大象放进冰箱,再调用关冰箱门的操作关好冰箱,这就是面向对象的思维过程,更加注重的是对象的属性及操作、以及各对象之间的联系。

二、什么是类

在面向对象的程序设计思维中,我们会发现许许多多的对象,但是并不一定每个对象都是一个类。如果某一些对象他们有着根本上的一些相同点,比如猫、狗、兔子等等他们都是动物,他们都有体重、年龄等等相同的属性,都有进食、移动等等操作,这时候我们就会把这些对象具有的相同点抽象出来封装为一个类。因此可以简单的理解为类就是对象的抽象,而类的具体的实例化就是对象。

三、OC中如何定义一个类

OC中定义一个类的语法如下:

        //定义类

@interface 类名 : 父类名

{

属性...

}

操作...

@end

//类的实现

@implementation 类名

操作的实现

@end

例如我们定义一个Person类,其具有姓名、年龄和体重三个属性,其具有吃饭和睡觉两个方法,则代码如下:

//Person类的定义
@interface Person : NSObject
{
NSString _name;//名字属性
int 	 _age;//年龄属性
<span style="white-space:pre">	</span>int <span style="white-space:pre">	</span>_weight;//体重属性
}
-(void) eat: (NSString *)foodName;//吃食物操作
-(void) sleep;//睡觉操作
@end

//Person类的实现

@implementation Person
-(void) eat: (NSString *)foodName
{
NSLog (@"人吃%@", foodName);
}

-(void) sleep
{
NSLog (@"人睡觉");
}

@end
在定义一个类时,类具有属性和方法,上述代码中_name、_age和_weight就称为类的属性,eat和sleep就称为类的方法。可以看到在eat和sleep之前都有一个 — 号 ,这个-号代表的是这是一个对象方法,在OC中还有一种方法是以+开头,这类方法称之为类方法。对象方法与类方法的区别在于,对象方法只能有类的实例对象进行调用,而类方法则由类本身进行调用。比如我实例化一个Person对象,Person
xiaoming = [Person new];则此时我可以通过xiaoming这个实例对象调用sleep方法,即[xiaoming sleep]。但我们不能这样调用:[Person sleep],因为sleep方法不是一个类方法。

四、OC中的私有变量和私有方法

在OC中还存在着一种变量和方法,我们称之为私有变量和私有方法。什么是私有变量和私有方法?私有变量指的是在类的实现文件中声明的成员变量,私有方法则是在头文件中没有声明而在实现文件中声明实现的方法。例如如以下代码所示:

//Person类的定义 Person.h
@interface Person : NSObject
{
NSString _name;//名字属性
int 	 _age;//年龄属性
}
-(void) eat: (NSString *)foodName;//吃食物操作
-(void) sleep;//睡觉操作
@end
//Person类的实现 Person.m
@implementation Person
{
int _weight;
}

-(void) getWeight
{
return _weight;
}

-(void) eat: (NSString *)foodName
{
NSLog (@"人吃%@", foodName);
}

-(void) sleep
{
NSLog (@"人睡觉");
}

@end
例如上述的代码片所示,在Person.m的实现文件中我们定义了一个_weight属性和一个getWeight方法,这就称之为Person类的私有属性和私有方法。但是在定义私有属性时需要注意不能与头文件中定义的属性重名。私有属性与私有方法都只能在其实现文件中访问,一般不能被其实例变量访问,且其私有属性和私有方法也不会被其子类继承。例如我们在main函数中书写如下代码:

#import <Foundation/Foundation.h>

int main(argc, char *argv[])
{
@autoreleasepool
{
Person p = [Person new];//定义一个Person变量p
//调用对象方法
[p eat:@"苹果"];
[p sleep];

//调用私有方法
[p getWeight];
}
return 0;
}
在上述的代码运行过程中我们将会发现打印出“人吃苹果”和“人睡觉”的结果,但getWeight方法则会报错。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios 黑马程序员 class