OC1_类与对象

//

//  main.m

//  OC1_类与对象

//

//  Created by zhangxueming on 15/6/9.

//  Copyright (c) 2015年 zhangxueming. All rights reserved.

//



#import <Foundation/Foundation.h>



//面向过程与面向对象



//C语言偏向面向过程

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

//五子棋

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

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



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

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



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



//类与对象

//从生活上:

//对象             类

//章子怡 奥巴马     人类

//小黑             狗类

//小飞的macbook    computer



//官方定义

//类: 具有相同特征事物的统称(抽象的概念)

//对象: 类的实例化(形象)



//从编程的角度来看

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

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

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

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



//类: Car     对象: Car *mycar

//Person    Person *xiaoHua



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

//[window earse];

//[text write];

//[text read];

//[view show];

//[xiaoHua age];



//Person

//{

//  NSString *name;

//  int age;

//}



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

//@end: 表示结束

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



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

//NSObject

//Next Step

//NSObject

//NSString

//NSArray

//NSData

//NSNumber

//NSMutableArray



@interface Student : NSObject   //NSObject类是一个根类(基类)

{

    NSString *_name;//实例变量的命名通常用_开头(习惯使然),以后每个单词的首字母大写;

    int _age;

}



//构造(初始化)方法



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

//id : 泛型对象指针 类似void *

//无形式参数, 返回值为 id类型  方法名: init

- (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



//initWithXXX

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

{

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

    //先用父类的构造初始化自己, 然后再初始化自定义的实例变量

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

    if (self) {

        _name = name;

        _age = age;

    }

    return self;

}



//getter方法实现

- (int)getAge

{

    return _age;

}



- (NSString *)getName

{

    return _name;

}



//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 *xiaoHua = [Student alloc];//alloc 类方法 创建对象

    

    xiaoHua = [xiaoHua initWithName:@"小华" andAge:12];



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



    Student *xiaoFei = [[Student alloc] initWithName:@"小飞" andAge:20];

    [xiaoFei setName:@"小小飞" andAge:22];

    

    NSLog(@"name = %@, age = %d",[xiaoFei getName], [xiaoFei getAge]);

}



@end





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

    @autoreleasepool {

        

        [Student testStudent];

        

    }

    return 0;

}

 

你可能感兴趣的:(类与对象)