20150609类和对象(上)

本文探讨了Objective-C编程语言中的面向过程与面向对象的区别,详细介绍了类与对象的概念,通过实例展示了如何使用类来封装数据结构和方法,并提供了自定义类的完整示例,包括构造方法、实例变量、getter和setter方法,以及类方法的实现。

//

//  main.m

//  IOS150609_objectiveC_ClassAndObjective

//

//  Created by Peng Junlong on 15/6/9.

//  Copyright (c) 2015 Peng Junlong. All rights reserved.

//


#import <Foundation/Foundation.h>

//**********************

//*  面向过程与面向对象   *

//**********************


//C语言是面向过程的

//面向过程强调业务逻辑

//五子棋:

//1.显示棋盘 2.黑子先走 3.判断输赢 4.绘制棋盘 5.白子下棋 6.判断输赢 7.绘制棋盘 8.返回第二步 9.下棋结束

//用函数把逻辑过程中的每一步实现,通过函数调用加上控制结构实现整个项目


//面向对象强调的是对象

//1.黑白双方 2.棋盘系统 3.下棋规则

//黑白双方负责接收用户输入,告知棋盘系统显示棋盘,通过棋盘规则判断输赢



//类与对象


//从生活上:

//对象                

//张三    奥巴马       人类


//官方定义

//:具有相同特征事物的统称

//对象:类的实例化


//从编程的角度看

//结构体:封装了数据结构

//函数:封装了处理数据的方法

//:既封装了数据结构,又封装了处理数据的方法(升级版的结构体)

//对象:用类定义的实例(类类型的对象)


//: Car        对象:Car *Toyouta

//   Person          Person *zhangSan


//实例方法(对象方法与实例变量

//[Window open];

//[Text write];

//[Text read];


//Person

//{

//  NSString *name;

//  int age;

//}


//@interface:定义类的关键字

//@end:表示类的定义结束

//Student:类名(类名的首字母一定要大写)


//系统类的命名:NS(NextStep)+每个单词的首字母大写

//NSObject

//NSString

//NSArray

//NSData


@interface Student : NSObject           //NSObject类是根类,即所有类的超类

{

    @private

    NSString *_name; //实例变量的命名通常用"_"开头,从第二个单词开始首字母大写;int是基本数据类型,如果你用int型数据的话,直接定义就可以而所有的类都是需要定义为指针的

    int _age;

}

/*成员变量必须包含在大括号中
     *注意成员变量不声明任何关键字的话是默认可访问性@Protected
     *注意在ObjC中不管是自定义的类还是系统类对象都必须是一个指针,例如下面的_name
     */

//构造(初始化)方法         构造方法的命名规则为:initWithXxxx

//"-"表示对象(实例)方法,给类的对象调用;"+"表示类方法,给当前类调用,通常用类名来调用

//id:泛型对象指针,类似C语言中的void *


//无形参方法,返回值为id类型

- (id)init;

//有一个形式参数name,返回值为id类型          方法名:initWithName:   (冒号是方法名的一部分)

- (id)initWithName:(NSString *)name;

//有两个形式参数,name age,返回值为id类型     方法名:initWithName:andAge:

- (id)initWithName:(NSString *)name andAge:(int)age;


//OC中的命名规则:第一个单词的首字母小写,以后的每一单词的首字母大写("驼峰规则")


////匿名方法方法名:initWithName::

//- (id)initWithName:(NSString *)name :(int)age;


//getter方法

//读取实例变量的方法

- (NSString *)getName;

- (int)getAge;


//setter方法

//修改实例变量的方法

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

- (void)setAge:(int)age;

- (void)setName:(NSString *)name andAge:(int)age;


//类方法

//给当前类调用,通过类名调用

+ (void)testStudent;


@end


//@implementation +类名          实现类的关键字

@implementation Student


- (id)init

{

if (self = [super init]) {

        

    }

    return self;

}


- (id)initWithName:(NSString *)name

{

  if (self = [super init]) {

        

    }

    return self;

}


- (id)initWithName:(NSString *)name andAge:(int)age

{

    self = [super init];        //super是调用父类方法的关键字(编译器符号)

                                //先用父类的构造方法初始化自己,然后再初始化自己自定义

                                //的实例变量(一定要先调用父类的init初始化自己)

                                //self指向调用者的对象指针

    if (self) {

        _name = name;

        _age = age;

    }

    

    return self;

}


//getter方法的实现

- (NSString *)getName

{

    return _name;

}


- (int)getAge

{

    return _age;

}


//setter方法的实现

- (void)setName:(NSString *)name

{

    _name = name;

}


-(void)setAge:(int)age

{

    _age = age;

}


- (void)setName:(NSString *)name andAge:(int)age

{

    _name = name;

    _age = age;

}


//测试当前类是否可用

+ (void)testStudent

{

    Student *zhangSan = [Student alloc];    //申请内存空间,返回申请到的内存的首地址,这才是对象;alloc 类方法 创建对象

    zhangSan = [zhangSan initWithName:@"张三" andAge:23]; //对分配的内存进行初始化

    

    NSLog(@"name = %@ , age = %i",[zhangSan getName],[zhangSan getAge]);

    

}


@end


int main(int argc, const char * argv[]) {

    @autoreleasepool {

        [Student testStudent];

        NSLog(@"Hello, World!");

    }

    return 0;

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值