OC基础DAY02 - OC基础语法

        • 什么是面向过程什么事面向对象
          • 例子 完成需求
          • 解决同一个问题的两种思路
            • 很明显下面这种方式是更好的他专业
    • 我们做的大部分事都是面向对象的因为对象是专业的自己做起来麻烦效果不好
        • 代码世界中面向对象
            • 找一个专门做排序的来排序一个能实现这个功能的代码来实现你的需求
          • 面向对象和面向过程的优缺点分析
          • 如果使用面向对象来解决问题
    • 什么是类和对象
          • 什么是对象
            • 买电脑的高手和装大象的冰箱就是对象是现实生活当中的具体存在特点是看得见摸得着拿过来就可以用
          • 什么是类
            • 千万不要跟那一类人一起玩因为那一类人都有相同的特征和行为物以类聚人以群分类是统称是抽象的不能直接使用
        • 类和对象之间的联系
        • 如何设计一个类
      • 如何使用代码定义一个类
        • 如何根据类的模板创建一个对象
          • 犯错列表
        • 方法的实现和调用
            • 类还有行为行为在类中用方法来表示和函数特别像
    • 使用注意
        • 方法中访问属性
            • 方法的实现中可以直接访问属性谁调用方法就是用谁的属性每个对象间独立毫无关系

什么是面向过程,什么事面向对象?

例子 完成需求
  1. 根据自己的需求和预算来初步的确定电脑的种类.
  2. 查找资料确定电脑的型号.
  3. 坐地铁去华强北.找到Apple专卖店.
  4. 砍价成功
  5. 愉快的回家

有可能买电脑的时候被坑,非常不愉快

解决方案: 找一个电脑高手,穴长跟你一起去.
1. 我什么都不用做
2. 只需要带上电脑高手带上钱
3. 完了就请他吃一个河粉,愉快的搞定了.

什么是电脑高手,是精通电脑,并且对电脑的行情非常熟悉.带上他你绝对不会被骗

解决同一个问题的两种思路
  1. 自己买电脑: 强调的是步骤,不能颠倒,自己是整个事情的主题,我是彻头彻尾的执行者,每件事情都是自己做.
  2. 电脑高手买电脑: 电脑高手是整个事情的主题,我是1个扬眉吐气的指挥者.
很明显下面这种方式是更好的.他专业.
  1. 解决这个问题的每一个步骤,都是我自己亲自去实现,这样的思路叫面向过程
  2. 自己不要亲自去做,而是找一个专门做这个事情的人来帮我做,像这样解决问题的思路,我们叫面向对象的解决思路

面向过程和面向对象:==就是解决同一个问题不同的思路而已==

> 我们做的大部分事都是面向对象的,因为对象是专业的,自己做起来麻烦,效果不好.

代码世界中面向对象

找一个专门做排序的来排序,一个能实现这个功能的代码来实现你的需求.
面向对象和面向过程的优缺点分析
面向过程 面向对象
C语言就是面向过程的语言 OC语言就是一门面向对象的语言.
一旦需求发生变化,就要代码推到重新来 需求变化的话,换个对象就能满足,后期维护修改方便
C语言有函数,函数之间是相互独立的,一个函数就是一个功能 一个人叫数组,他有与数组相关的很多功能.
如果使用面向对象来解决问题
  1. 当你遇到需求的时候,千万要记住,不要自己一步一步的去实现,后期不好维护
  2. 框架.框架中就有很多人在听你的召唤.不同的框架当中预置了很多可以做很多不同事情的人.( 类 ).
  3. 首先先去找预置的框架当中有没有专门做这个事情的人,如果有直接喊过来用.
  4. 如果没有,就自己造一个可以实现这个需求的人.( 自己造的现在可以用这个人,以后也可以使用).

什么是类和对象?

什么是对象?
买电脑的高手和装大象的冰箱就是对象.是现实生活当中的==具体存在==,特点是看得见摸得着拿过来就可以用.
什么是类?
千万不要跟那一类人一起玩.因为那一类人都有==相同的特征和行为==.物以类聚,人以群分.类是统称,是抽象的,不能直接使用.

类就比如: 学生.电脑,食物,水果,苹果都是类,交通工具,车,汽车,奔驰汽车,奔驰汽车GLS.

对象就是: 小明早上吃的那颗苹果,曾凡怡的MBA,我家里那辆雷凌

==只要不具体到某一个就是统称,就是类==

类和对象之间的联系

  1. 类是来干啥的:用来描述一群具有相同特征和行为的事物
  2. 对象是一类事物中的1个具体的存在.
  3. 类是模板,规定好了什么样的东西才叫这一类.找到一个对象就必须要有模板规定的,不能多不能少.
  4. 类是造月饼的模子,模子不能吃,类是不能用的
  5. 对象是根据模子造出来的月饼,上面的花纹不会多不会少.特征和行为不会多不会少.
  6. ==对象是满足类的特征的一个个体==.==类是一个特征和行为的模板==
  7. 汽车图纸和汽车,房屋平面图和房子.

如何设计一个类

  1. 是来干嘛的? : 具有相同特征和行为的事物
  2. 设计类的三要素

    > 1. 这类事物的名称
    > 2. 这类事物具有的共同的特征,都拥有什么
    > 3. 这类事物具有的共同的行为,具备什么样的功能
    >

    设计有个电脑类:

    > 名称: 电脑
    > 特征: CPU 内存 显卡 声卡...
    > 行为: 开机 关机 放电影...
    >

    人类:

    > 人:
    > 特征:姓名 性别 年龄...
    > 行为:走路 吃饭...
    >
  3. ==如何找类==? 名词提炼法:分析整个业务流程中出现了哪些名词,这些名词就是类, 然后根据类的三要素没来分析这些类有哪些特征和行为
三两坦克发射了6枚炮弹大众了两架飞机
坦克类:
特征: 颜色,尺寸,型号,炮弹,...
行为: 发射

炮弹类:
特征: 威力,射程...
行为: 爆炸,飞行...

飞机类:
特征: 颜色 大小 翅膀...
行为: 飞行 攻击 爆炸...

小明在公交车上牵着一只叼着热狗的狗
人类:
特征: 姓名,年龄,狗
行为: 遛狗

公交车类:
特征: 大小,座位数...
行为: 载客 行使

热狗:
特征: 大小,颜色,气味...
行为: 散发气味

狗:
特征: 姓名 品种 热狗...
特征: 吃,叼热狗

如何使用代码定义一个类

  1. 为什么要定义,因为要描述一群具有相同特征和行为的事物.
  2. 设计类的三要素.类名,特征,行为.
  3. 定义一个类的语法
a. 定义类的位置,写在main函数的外面.直接写在源文件下.

b. 在OC当中创建一个类,需要两个步骤.

    -->类的声明
    @interface 类名: NSObject
    {
        //这类事物具有的相同的特征.
        //把这些特征定义为一个一个的变量.
        数据类型1 变量名1;
        数据类型2 变量名2;
        ......
    }
    //写上这类事物具有的共同的行为,用方法来表示.
    //写上方法的声明
    @end

    -->类的实现
    @implmentation 类名
    方法的实现.
    @end

    //person类的声明
    @interface Person : NSObject
    {
        NSString *_name;
        int _age;
        float _height;
        float _weight;
    }
    @end

    //person类的实现
    @implementation Person

    @end

    c. 需要注意的是
    类所具备的共同的特征,应该是以变量的形式声明在@interface的大括弧中.
  1. 定义的时候必须要注意的
a. 类必须要有声明和实现.必须同时有
b. 类名 这个类是用来描述哪一类事物的,直接使用这类事物的名称当做这个类的名称,类名的每一个单词的首字母大写
c. 写类的时候,类名不能和框架中的类的名字冲突,为了防止冲突我们给类加一个前缀.
d. 冒号后面的NSObject 不要管什么意思 照写.
e. 用来表示这类事物具有的共同的特征的变量应该定义在@interface的大括号中.这些变量有人叫: 特征,属性,成员变量,实例变量,字段,实例字段.
f. 属性的名称必须要以_开头.这是规范.

如何根据类的模板创建一个对象

  1. 类是无法直接使用的,类是抽象的.
  2. 如果非要使用的话,就必须要找到这个类中的一个具体的存在,找到一个对象.
  3. 这个对象的特点
a. 拥有类所定义的所有的东东.
b. 这个时候,这个对象就可以直接使用了
  1. 如何创建1个类的对象
语法格式:
类名 *对象名 = [类名 new];
HMPerson *xiaoMing = [HMPerson new];
这个时候,就根据HMPerson类模板创建了一个xiaoMing对象,类里面有什么对象里面就有什么.

5.xiaoMing对象可以直接使用,如何使用?如何访问对象当中的属性.

对象名->属性名 = 数据;
也可以取值
xiaoMing->_name = @"Jack"; 
//默认情况下对象当中的属性是不允许在外界访问的.直接这样坐会报错.
//如果就是要访问,就在定义类的地方,属性前面加一个修饰符  @public
  1. 还可以这样访问,充分说明其实就是结构体
(*对象名).属性名;
(*xiaoMing).name = @"小明";
犯错列表
  1. 声明和实现的类名要一致 有(前缀)
  2. @interface下面有1个大括弧,属性写在大括弧中
  3. 属性一定要以下划线开头,访问的时候也一定要写下划线
  4. 对象名是个指针变量,所以要遵守变量的命名规范
  5. 默认情况,对象的属性是不允许外界访问,要加一个@public.
  6. 为对象的属性赋值,就是为对象的属性变量赋值,类型要一样.
  7. 类的外部不能直接操作属性(方法中可以),所以要创建对象后为对象的属性赋值.
  8. 创建类的对象时先写中括号再回去写就有提示了.

9.

方法的实现和调用

类还有行为,行为在类中用方法来表示,和函数特别像
  1. 类中创建方法来代表类的行为,分两个步骤
1. 方法的声明
写在@interface的大括弧外面

2. 方法的实现
写在@implementation
  1. 无参数的方法声明
声明:
- (返回值类型)方法名称;

实现:将方法头拷贝到@implementation中,删除分号,在大括号中写实现

调用:
类中的方法不能直接调用,因为类不能直接实用,如果非要用的话就得创建类的对象.
HMPerson *p1 = [HMPerson new];
//对象当中有类所定义的所有的属性和方法.
[对象名 方法名];
  1. 带一个参数方法的声明
声明
- (返回值类型)方法名:(参数类型)形参名称;
- (void)eat:(NSString *)foodName;
实现
- (void)eat:(NSString *)foodName
{
    NSLog(@"主人你给我的%@真好吃",foodName);
}
调用带一个参数的方法
类中的方法不能直接调用,创建对象以后才能使用
[对象名 方法:实参];
  1. 带多个参数的方法
声明
- (返回值类型)方法名:(形参类型)形参名1 :(形参类型)形参名2 :(形参类型)形参名3;
- (int)sum:(int)num1 :(int)num2;

实现
- (int)sum:(int)num1 :(int)num2
{
    int sum = num1 + num2;
    return = sum;
}

调用
[对象名 方法名:实参1 :实参2 :实参3];
int sum = [p1 sum:10 :20];

5. ==使用注意==

  1. 关于方法的名称
如果方法没有参数,那么方法名字就是方法的名字...  eat
如果有参数就是  eat: :
  1. 带参数的方法的命名规范!!
如果带一个参数
xxxWith:
- (void)eatWith:(NSString*)foodName;
[p1 eatWith:@"红烧肉"];
看起来就像一条完整的语句!

==一个参数最标准的写法==
xxxWithxxx:
- (void)eatWithFood:(NSString)foodName;
[p1 eatWithFood:@"红烧土豆"];

带多个参数的!
xxxWith:(
- (int)sumWith:(int)num1 and:(int)num2;
int sum = [p1 sumWith:10 and:20];

==多个参数最规范的==
xxWith参数1: and参数2: and参数3:
- (void)sumWithNum1:(int)num1 andNUm2(int)num2;
[p1 sumWithNum1:10 andNum2:20];

==最重要的是在调用方法的时候可以看起来是一条完整的语句==

方法中访问属性

方法的实现中可以直接访问属性,谁调用方法就是用谁的属性.每个对象间独立毫无关系.

你可能感兴趣的:(OC基础,面向对象,OC)