oc 面向对象特性(接口,实现,方法发送,访问成员变量)

来源:互联网 发布:python基本命令 编辑:程序博客网 时间:2024/06/09 18:32

概述

Objective-C作为一种面向对象的编程语言,具有面向对象的基本特征,即:封装、继承和多态。主要介绍Objective-C中有关面向对象基本概念:类、对象、方法和属性等。 


Objective-C中的类 

类是Objective-C中的一种重要的数据类型,是组成Objective-C程序的基本要素。Objective-C的类声明和实现包括两个部分:接口部分和实现部分。 

@interface Song: NSObject { ......}......@end@implementation Song ......@end


接口部分

使用关键字@interface,主要定义了类名、继承的父类、实现的协议、成员变量和方法等信息。下面的代码是Song类的接口部分声明。 

@interface Song : NSObject {      NSString *title;      NSString *artist;      long int duration;}- (void)start;- (void)stop;- (void)seek:(long int)time;@end


实现部分

使用关键字@implementation,主要实现了在接口部分定义的方法等信息。下面的代码是Song类的实现部分声明。 

@implementation Song- (void)start { //开始播放}- (void)stop {//停止播放 }- (void)seek:(long int)time { //跳过时间} @end


方法和消息

Objective-C中方法定义非常古怪,它遵循了SmallTalk语法风格,它将一个方法名字分成几个部分。 


说明:

定义了两个参数的方法,第一个参数是anObject,参数类型是id类型,第二个参数是index,参数类型是NSUInteger,这叫做多重参数。它的返回类型是void,方法签名是insertObject:atIndex:。方法类型标识符中都“-”代表方法是实例方法,“+”代表方法是类方法,关于实例方法和类方法我们将在后面内容中讨论。如果上面的方法变成C或C++形式,则是下面的样子的:

-(void) insertObjectAtIndex(id anObject, NSUInteger index) 


消息发送

对于方法的调用通常也不称之为调用,而是称为发出消息,操作符号不是“.”而是“[⋯]”,如下所示:

[myObject insertObject: ojb1 atIndex:0];

即向myObject对象发出一个消息insertObject:atIndex:。而在实际使用时候这两种叫法都会用,这不是严格划分。 


访问成员变量

从面向对象的封装角度考虑问题,要想访问类中的成员变量,是要通过方法访问的,成员变量前面要有作用域限定符(protected, public, private),这些存取权限修饰符我们将在后面介绍。

成员变量的访问,是通过读取方法(getter)和设定方法(setter)。 

Song.h文件:

@interface Song : NSObject {       NSString *title;       NSString *artist;       long int duration;}//操作方法- (void)start;- (void)stop;-  (void)seek:(long int)time;//访问成员变量方法- (NSString *)title;- (void)setTitle:(NSString *)newTitle;- (NSString *)artist;- (void)setArtist:(NSString *)newArtist; - (long int)duration;- (void)setDuration:(long int)newDuration; @end


Song.m文件:

@implementation Song- (void)start {//开始播放 - (void)stop {//停止播放- (void)seek:(long int)time {//跳过时间 ... ...
//访问成员变量方法- (NSString *)title {       return title;}- (void)setTitle:(NSString *)newTitle {       title = newTitle;}- (NSString *)artist {       return artist;}- (void)setArtist:(NSString *)newArtist {       artist = newArtist;}- (long int)duration {       return duration;}- (void)setDuration:(long int)newDuration {} @end

小结

采用了封装之后就可以通过存取方法访问属性,例如[mySong title]是取得title成员变量内容。

如果不考虑封装的问题,单从技术上讲Objective-C,可以直接通过对象访问成员变量的,访问操作符是“->”,例如:mySong->title,也可以取得title成员变量的内容。 







0 0
原创粉丝点击