下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922
论坛 >移动开发 >移动开发之面向对象上篇

移动开发之面向对象上篇

一路风景都看透发布于 2015-07-12 21:04查看:1109回复:3

前言

面向对象是程序开发中最重要的部分,无论是Java还是Object-c都是一门面向对象的语言,我们这里对比总结这两种语言,体会一下面向对象的思想,慢慢会觉得语言只是工具,思想才是灵魂。

我还是喜欢拿代码开篇,这样好展开总结一些概念性的东西,而不至于理论说多太乏味。说干就干,先上代码:

Java

/**
 * Student类
 */
public class Student {
    //私有成员变量
    private String mName;

    protected String age;

    public static String grade;

    //构造函数
    public Student(String name,String age){
        this.name = name;
        this.age = age;
    }

    public String getName(){
        return mName;
    }

    public void setName(String name){
        this.mName = name;
    }

    //类方法
    public static setGrade(String grade){
        grade = grade;
    }
}

Object-c

//SLStudent.h文件
#import 

@interface SLStudent : NSObject
{
    NSInteger _age;

    @private
    NSString *_name;
}

- (id) initWithStudent:(NSString *)name age:(NSInteger)age;

- (void) setName : (NSString *) name;

- (NSString *) name;

@property (nonatomic,copy,getter=xxx,setter=yyy:) NSString *gender;
@end

//SLStudent.m文件
#import 
#import "SLStudent.h"

//全局变量模拟类变量,如单例模式使用到
static NSString *grade = nil;
@implementation SLPerson

@synthesize gender = _gender;

- (id) initWithStudent:(NSString *)name age:(NSInteger)age
{
    if(self = [super init])
    {
        _name = name;
        _age = age;
    }
    return self;
}

- (void) setName : (NSString *) name
{
    self->_name = name;
}

- (NSString *) name
{
    return _name;
}

+ (NSString *) grade
{
    return grade;
}

+ (void) setGrade : (NSString *) newGrade
{
    grade = newGrade;
}

对比上面的代码做一些说明:

  • 上面分别用Java代码和Object-c实现两个Student类,分别对应的属性有name,age,grade.

  • Java用class这个关键字来定义类,而Obect-c这里和Java不一样的地方,它分为两个文件:.h和.m文件,其中.h是声明文件,.m是类的实现文件,我们一般把方法和成员变量声明在.h文件中,而方法的实现放在.m文件中。我们用@interface作为声明类的开始,@end作为结尾,同样@implementation作为实现类的开始,@end为结束。

  • Java中用static这个关键字修饰方法来表示类方法,修饰变量来表示类变量。否则就是实例变量;而我们在之前的一篇文章中说static关键字修饰变量和方法在C语言中则表示只能在当前文件中使用。所以Object-c中修饰类方法则是用“+”方法来表示,实例方法则用“-”表示。

  • Java中声明私有成员变量建议以m开头,而Object-c中则建议以下划线_开头。

  • 关于方法的定义:

//Java
public void methodName(type1 paramName1,type1 paramName2){
  //方法体
}
//Object-c实现
- (void) methodName:(type1)paramName1 withType2:(type2)paramName2
{
  //方法体
}
//其中methodName方法名字,type类型,paramName形参,这里提到withType2是指形参标签,Object-c中更好的理解形参的作用而引入,且只有从第二个参数开始有。
  • Java中类默认都继承Object,用关键字extends表示,一般省略,而Object-c中都继承NSObject,用:表示,一般不能省略。

  • Object-c中对于没有在.m文件中声明的方法和变量只能在该实现类中使用,只有在.h文件中定义的内容才可以暴漏在外面供用户调用,这也体现了良好的封装意识。

  • 苹果公司建议在类前面加标识,也即这里的SL前缀,cocoa框架的类大多以NS开头,据说是乔布斯当时创立NextStep,把Object-c做为他们的主要开发语言,NS就是来自公司的缩写。

  • 对于类的创建和方法调用:

//Java
Student student = new Student();
student.getName();
student.setName("宇行信");
//其语法格式:
调用者.方法名(参数...);

//Object-c
SLStudent *student = [SLStudent alloc] init];
[student name];
[student setName:@"宇行信"];
//其语法格式:
[调用者 方法名:参数 形参标签:参数...];
  • Java中的this关键字和Object-c中的self关键字都是表示调用该方法或者变量的对象。而super关键字代表其父类的实例。

  • Object-c中可以拿id类型作为所有对象的类型,也就是说,任意对象都可以赋值给id类型的变量。

  • 对于方法中的可变形参,两种语言都支持,具体可以脑补一下。

  • Java用static来声明作为类变量,但是在Object-c中不支持类变量,但是可以模拟,如上面变量gender,具体用处我们可以在设计单例模式中用到。


收藏(0)0
查看评分情况

全部评分

此主贴暂时没有点赞评分

总计:0

回复分享

共有3条评论

  • 慧星的那一夜
  • MK
  • 药师
  • IT宅男
  • mr jack
  • YUI
  • Mr ken
  • cappuccino
  • 课课家技术团队1
  • 选择版块:

  • 标题:

  • 内容

  • 验证码:

  • 标题:

  • 内容

  • 选择版块:

移动帖子x

移动到: