黑马程序员------OC 面向对象和面向过程思想(基础)
2015-07-28 21:22
363 查看
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流!
——-
类是抽象的不是具体的某一个事物,它描述了事物的属性和功能,我们根据类的描述便可以创造出一个具体的对象。就像现实生活中我们画图纸设计一辆
车,图纸上包括车的属性:轮子数、时速、等等,以及车的功能(行为):启动、跑、倒车、熄火、等等,这个就相当于面向对象编程中的类。我们可以
根据图纸的设计制造出具体的事物:汽车,这相当于面向对象编程中的对象。
比如设计一个人类:
事物名称(类名):人(person)
属性(成员变量):身高(height)、年龄(age)
行为(方法):跑(run)、跳(jump)
类名有几点要注意:1.类名的第一个字母必须是大写;2.类名当中不能带有下划线;3.类名如果是由多个英文单词组成,则要使用驼峰标识
#import <Foundation/Foundation.h>//用#import关键词导入Foundation框架,是这个系统框架中的类库
@interface
Car :
NSObject/*@interface 表示我们要声明一个类,后面跟类名,":"后面跟的是基类名,所有的类都继承它,它封装了一些东西供继承它的子类使用*/
{
int wheels;//声明成员变量即类的属性:表示也整型车轮数
int speed;//表示汽车车速
}
- (void)run;//声明一个对象方法(行为),前面是“-”号则代表这是一个对象方法只能由具体的对象来调用
+ (void)test;//声明一个类方法,它可被类名直接调用,类方法不能直接访问成员变量
@end//@end意味着类的声明部分结束
@implementation
Car/*@implementation表明这是类的实现部分,类的声明和实现可以分开写(不同的文件当中也可),但是声明必须在main函数前面*/
- (void)run
{
NSLog(@"车子跑");//类的实现里面通常写方法怎么来完成该动作
}
+ (void)test
{
NSLog(@"做模拟实验");} //NSLog表示输出
@end//@end表明类的实现结束
#import <Foundation/Foundation.h>
@interface
Car : NSObject
{
@public
int wheels;
int speed;
}
- (void)run;
+ (void)test;
@end
@implementation Car
- (void)run
{
NSLog(@"%d个轮子的车跑起来了时速达%d公里每小时",
wheels, speed);
}
+ (void)test
{
NSLog(@"做模拟实验");
}
@end
int main()
{
[Car test];//用类名直接调用类方法,不依赖于对象
Car *car;//声明一个指向Car类型的指针变量
car = [Car new];//调用类的方法,直接赋值给指针变量car
car->wheels =
4;//car类型变量直接指向wheels并直接赋值为4
car->speed = 200;//给成员变量speed赋值为200
[car run];//用调用对象方法,让汽车跑起来了
return 0;
}
1> 以加号“+”开头;
2> 只能由类名调用,对象不能调用;
3> 类方法中不能直接访问成员变量(实例变量);
4> 可以在类方法中通过调用对象方法访问成员变量;
5> 当不需要访问成员变量的时候尽量用类方法。
对象方法:
1> 以减号“-”开头;
2> 只能由对象调用,没有对象,这个方法根本不可能被执行;
3> 对象方法能访问实例变量。
2. 函数不属于类,跟类没有联系,函数只归定义函数的文件所有;
3. 函数不能访问oc对象的成员变量,指向对象的指针可以作为函数的返回值也可以作为函数的参数。
@try 在oc异常捕捉机制
异常:程序的运行的时候有bug 捕捉机制,排除错误
@catch
捕捉具体的异常类型 捕捉一个比较重要的异常类型
@finally
不管有没有异常都会执行该命令
@interface 类名:父类名
{
//定义类的属性
}
//类的行为(必须写在大括号外)
@end
类的实现(实现具体的行为)
@implementation类名
//行为的具体实现
@end
——-
类和对象
面向对象编程中有两个重要的概念:类和对象。对象就是根据类创建出来的。类是抽象的不是具体的某一个事物,它描述了事物的属性和功能,我们根据类的描述便可以创造出一个具体的对象。就像现实生活中我们画图纸设计一辆
车,图纸上包括车的属性:轮子数、时速、等等,以及车的功能(行为):启动、跑、倒车、熄火、等等,这个就相当于面向对象编程中的类。我们可以
根据图纸的设计制造出具体的事物:汽车,这相当于面向对象编程中的对象。
类的设计
我们在类的设计时,必须关心三个方面:事物名称(类名)、属性(成员变量或称实例变量)、行为(方法)。比如设计一个人类:
事物名称(类名):人(person)
属性(成员变量):身高(height)、年龄(age)
行为(方法):跑(run)、跳(jump)
类名有几点要注意:1.类名的第一个字母必须是大写;2.类名当中不能带有下划线;3.类名如果是由多个英文单词组成,则要使用驼峰标识
类的申明和实现
例如:#import <Foundation/Foundation.h>//用#import关键词导入Foundation框架,是这个系统框架中的类库
@interface
Car :
NSObject/*@interface 表示我们要声明一个类,后面跟类名,":"后面跟的是基类名,所有的类都继承它,它封装了一些东西供继承它的子类使用*/
{
int wheels;//声明成员变量即类的属性:表示也整型车轮数
int speed;//表示汽车车速
}
- (void)run;//声明一个对象方法(行为),前面是“-”号则代表这是一个对象方法只能由具体的对象来调用
+ (void)test;//声明一个类方法,它可被类名直接调用,类方法不能直接访问成员变量
@end//@end意味着类的声明部分结束
@implementation
Car/*@implementation表明这是类的实现部分,类的声明和实现可以分开写(不同的文件当中也可),但是声明必须在main函数前面*/
- (void)run
{
NSLog(@"车子跑");//类的实现里面通常写方法怎么来完成该动作
}
+ (void)test
{
NSLog(@"做模拟实验");} //NSLog表示输出
@end//@end表明类的实现结束
OC 面向对象的实现
例如#import <Foundation/Foundation.h>
@interface
Car : NSObject
{
@public
int wheels;
int speed;
}
- (void)run;
+ (void)test;
@end
@implementation Car
- (void)run
{
NSLog(@"%d个轮子的车跑起来了时速达%d公里每小时",
wheels, speed);
}
+ (void)test
{
NSLog(@"做模拟实验");
}
@end
int main()
{
[Car test];//用类名直接调用类方法,不依赖于对象
Car *car;//声明一个指向Car类型的指针变量
car = [Car new];//调用类的方法,直接赋值给指针变量car
car->wheels =
4;//car类型变量直接指向wheels并直接赋值为4
car->speed = 200;//给成员变量speed赋值为200
[car run];//用调用对象方法,让汽车跑起来了
return 0;
}
类方法和对象方法的区别
1.类方法:1> 以加号“+”开头;
2> 只能由类名调用,对象不能调用;
3> 类方法中不能直接访问成员变量(实例变量);
4> 可以在类方法中通过调用对象方法访问成员变量;
5> 当不需要访问成员变量的时候尽量用类方法。
对象方法:
1> 以减号“-”开头;
2> 只能由对象调用,没有对象,这个方法根本不可能被执行;
3> 对象方法能访问实例变量。
oc语言中的方法与函数的区别:
1. oc方法只能声明在@interface和@end之间,只能实现在@implementation和@end之间。不能独立于类存在;2. 函数不属于类,跟类没有联系,函数只归定义函数的文件所有;
3. 函数不能访问oc对象的成员变量,指向对象的指针可以作为函数的返回值也可以作为函数的参数。
@try 在oc异常捕捉机制
异常:程序的运行的时候有bug 捕捉机制,排除错误
@catch
捕捉具体的异常类型 捕捉一个比较重要的异常类型
@finally
不管有没有异常都会执行该命令
类的基本语法
类 的声明(规定的当前的类名,属性,行为)语法@interface 类名:父类名
{
//定义类的属性
}
//类的行为(必须写在大括号外)
@end
类的实现(实现具体的行为)
@implementation类名
//行为的具体实现
@end
相关文章推荐
- 黑马程序员——高新技术---Java基础-set接口,Map接口
- 剑指offer_面试题7_用两个栈实现队列(让我熟悉了类模板的使用)
- 面试题27_二叉搜索树与双向链表
- 笔试/面试题记录
- 阿里面试总结
- 剑指offer面试题11——数值的整数次方
- 面试题26_带随机指针的链表复制
- 【面试加分项】java异常处理之try_catch_finally
- 每个程序员需掌握的20个代码命名小贴士
- 黑马程序员——泛型
- 黑马程序员——集合(二)
- 黑马程序员---函数的相关知识
- 黑马程序员——Java基础 数组排序的两种实现方法,选择和冒泡
- Android面试题(含答案)
- 面试题
- 年轻程序员需要学习的5大经验
- (4.4.9)android最全面试题71道题 详解
- 程序员分类(转)
- 剑指Offer面试题8(java版):旋转数组的最小数字
- (4.4.8)Android常见笔试面试题