ios学习之旅---oc面向对象的特点

来源:互联网 发布:网络推广的岗位职责 编辑:程序博客网 时间:2024/06/05 18:15
1.OC简介
Objective-C是一种面向对象的计算机语言,Brad J Cox 1980s 设计了Objective-C,
 该语言是基于SmallTalk-80。1988 NeXT 发布了Objective-C,它的开发环境和类库叫
“NEXTSTEP”,1994年NeXT与Sun发布了标准的NEXTSTEP系统,取 名“OPENSTEP”,
 软件自由基金会OPENSTEP版本叫GNUStep。
  1996 苹果公司开始支持NeXT,把NEXTSTEP/OPENSTEP用于 Mac OS X操作系统开发,
它的版本和开发环境叫Cocoa,使用 Objective-C作为基础语言,开发工具Xcode和Interface Builder。
2007 苹果公司推出Objective-C 2.0,Objective-C是Mac OS X和 iOS开发的基础语言
特点:
   OC不是一门全新的语言
   C语言的基础上增加了一层最小的面向对象语法 
   OC完全兼容C语言语言
   可以在OC代码中混入C语言代码,甚至是C++代码
   可以使用OC开发Mac OS X平台和iOS平台的应用程序
2.设计类
 类名:Zombies
 属性:life,颜色,位置,形状
 行为:走,咬,死,loseLife
 
 炮弹
 类名:Cannonball
 属性:大小,威力,飞行距离,速度
 行为:飞,爆炸
 
 车
 类名:Car
 属性:载员,速度,牌照
 行为:跑,停
 
 学生
 类名:Student
 属性:姓名、学号,性别
 行为:学习,逃学
 
 手机:
 类名:Phone
 属性:大小,尺寸,颜色,_cup,内存
 行为:打电话,发短信

3.NSString类的简介

#import <Foundation/Foundation.h>#import <string.h>int main(int argc, const char * argv[]) {   //  NSString 对象的创建    // 1、通过字面量创建    NSString *str  =  @"天气冷了,注意身体!";    NSLog(@"%@",str);// 2、通过对象方法//    NSString *str1  = [NSString new];    NSString *str1 = [NSString alloc];//    str1 = [str1 init];     str1 = [str1 initWithUTF8String:"大家要努力学习啊!"];    NSLog(@"%@",str1);// 3、通过类方法创建对象//    类方法它是隶属于类的,它是通过“类名”调用//    此处的格式化字符串与NSLog中的格式化字符串是一样的    NSString *str2 = [NSString stringWithFormat:@"今天股票有跌%d个点!", 10];    NSLog(@"%@",str2);   // 4、NSString 对象中表示长度函数//   command + 鼠标左键点击进去//  length 计算的是字符串中有几个字符    long len  = [str length];    NSLog(@"%ld",len);        char *strc = "天气冷了,注意身体!";//  strlen计算字符串所占用的字节数,在UTF8编码中一个中文占用3个字节    len  =  strlen(strc);    NSLog(@"%ld",len);          len = [@"abc你好" length];    NSLog(@"%ld",len);       return 0;}
4.BOOL类型
  BOOL OC提供的一种Boolean类型,就是用来表示逻辑上真与假这个类型 
  BOOL 在OC中有两个取值  YES 和 NO
  YES 真 对应数字 1
  NO  假 对应数字 0 
  使用BOOL可以提高代码可读性,减少代码的出错率
  所有数据类型都可以定义变量
  所有的数据类型都可以作为形参或实参
  所有数据类型类都可以作为返回值

#import <Foundation/Foundation.h>void testBool(BOOL flag){    if (flag) {        NSLog(@"真");    }else{        NSLog(@"假");    }}@interface CZLogin : NSObject- (BOOL) vilidateUserName:(NSString *)userName andPassword:(NSString *) password;@end@implementation CZLogin- (BOOL)vilidateUserName:(NSString *)userName andPassword:(NSString *)password{//  当对象进行==比较时候,比较是它们所指向的是不是同一个地址//  验证用户名不能为空//  nil 空对象    if (userName == nil || [userName isEqualTo:@""]) {                NSLog(@"用户名不能为空");        return NO;    }        if (password == nil || [password isEqualTo:@""]) {        NSLog(@"密码不能为空");        return NO;    }        if ([userName isEqualTo:@"大木"] && [password isEqualTo:@"123"]) {        return YES;    }        return NO;}@endint main(int argc, const char * argv[]) {         CZLogin *login =  [CZLogin new];       BOOL canLogin  =  [login vilidateUserName:@"大木" andPassword:@""];    if (canLogin) {        NSLog(@"可以登录!");    }else{        NSLog(@"登录失败!");    }        BOOL isTrue = YES;    testBool(YES);    testBool(NO);        //  找出10~100中可以被7整除的最小的数    //    for(int i = 10;i < 100;i++)//    {//        BOOL isDivisible = (i % 7 == 0);//        if (isDivisible) {//            NSLog(@"%d",i);//            break;//        }//    }       return 0;}
5.对象与方法
   1、对象做方法参数传递是地址传递
   2、对象可以在方法中进行连续的传递
   3、对象可以作为方法的返回值

#import <Foundation/Foundation.h>/*  定义狗类  类名 CZDog  属性 _name  行为 biteOtherDog */@interface CZDog : NSObject{@public    NSString *_name;}- (void) biteOtherDog:(CZDog *) other;@end@implementation CZDog- (void) biteOtherDog:(CZDog *) other{    NSLog(@"%@ 咬了 %@ 一口",_name,other->_name);}@end/*   Person类   changeDog   orderDog: biteOtherDog:  */@interface CZPerson : NSObject//用于改变狗名字- (void) changeDog:(CZDog *) dog;/** *  指使一个狗去咬另外一个狗 * *  @param dog   去咬的那个狗 *  @param other 被咬那只狗 */- (void) orderDog:(CZDog *) dog biteOtherDog:(CZDog *) other;@end@implementation CZPerson//对象作为方法参数- (CZDog *) sellDog{    return [CZDog new];}//用于改变狗名字- (void) changeDog:(CZDog *) dog{    dog->_name = @"大黄";}/** *  指使一个狗去咬另外一个狗 * *  @param dog   去咬的那个狗 *  @param other 被咬那只狗  */- (void) orderDog:(CZDog *) dog biteOtherDog:(CZDog *) other{//   让去这只狗去咬另外一只狗    [dog biteOtherDog:other];}@endint main(int argc, const char * argv[]) {          CZDog *dog = [CZDog new];    dog->_name = @"旺财";            CZDog *other = [CZDog new];    other->_name = @"小黑";        CZPerson *person = [CZPerson new];    [person changeDog:dog];        NSLog(@"%@",dog->_name);//  对象作为方法参数的连续传递    [person orderDog:dog biteOtherDog:other];       CZDog *newDog  =  [person sellDog];       newDog->_name = @"小狗!";       NSLog(@"%@",newDog->_name);        return 0;}

6.封装:
  1、类是数据与功能的封装,数据就是成员变量,功能就类方法或对象方法
  2、对数据的封装
     如果我们把属性设置为@public那么,这个属性外部就可以任意的修改,我们就失去管理这个属性的权利
     1、当你把属性暴露在外部的时候,那么你就是失去对它的管理,一旦这个属性被多个人用的时候,如果再像管理这个属性就变得非常麻烦,这个类的可维护性就变得很差
     
     2、怎么对数据进行封装
        1、为每一个属性提供getter 和 setter方法
        2、setter方法:又称为写方法,赋值给对象赋值
           1、必须是对象方法
           2、它没有返回值
           3、名字 set + 属性名称去掉下划线,首字母大写
           4、必须提供一个参数,参数类型必须与所对象的成员变量的类型一致
        3、getter方法:又称为读方法,赋值读取属性的值
           1、必须是对象方法
           2、必须要返回值,并且返回值类型要与成员变量类型一致
           3、方法名必须是成员变量去掉下划线
           4、一定是空参的
  3在对象方法中访问成员变量的时候,其中隐藏一个指针
   当方法中如果没有与成员变量名称相同变量,编译器在编译会自动给它加上一个self指针
   如果有与成员变量同名的局部变量,那么这个名字就是一个局部变量,编译器就不会再给他加上self指针了

#import <Foundation/Foundation.h>#import "CZCat.h"/** 设计车类,提供getter和setter方法 1> 车 (1)属性 * 轮子数 * 速度 (2)方法 * 属性相应的setter和getter方法 */@interface CZCar : NSObject{    int _wheels;//车轮数‘    double _speed;//速度}//_wheels setter- (void) setWheels:(int) wheels;- (int) wheels;- (void) setSpeed:(double) speed;- (double) speed;@end@implementation CZCar//_wheels setter- (void) setWheels:(int) wheels{    _wheels = wheels;}- (int) wheels{    return _wheels;}- (void) setSpeed:(double) speed{    _speed = speed;}- (double) speed{    return _speed;}@endint main(int argc, const char * argv[]) {      CZCat *cat =  [CZCat new];    [cat setAge:100];       [cat setName:@"小黑"];       NSLog(@"age = %d,name = %@",[cat age],[cat name]);            return 0;}





0 0