黑马软件工程师-OC之面向对象

黑马程序员------OC之面向对象

                 

好的,我们首先来解释一下什么叫“面向对象”,其实就是找一个对象,然后面向着她就是咯~哈,开个玩笑·~~~~


一、基本概念

            面向对象:我们这里所说的面向对象一般 指的是面向对象程序设计。

        面向对象程序设计(英语:Object-oriented programming,缩写:OOP)是一种程序设计范型,同时也是一种程序开发的方法。对象指的是类的实例。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。
        面向对象程序设计可以看作一种在程序中包含各种独立而又互相调用的对象的思想,这与传统的思想刚好相反:传统的程序设计主张将程序看作一系列函数的集合,或者直接就是一系列对电脑下达的指令。面向对象程序设计中的每一个对象都应该能够接受数据、处理数据并将数据传达给其它对象,因此它们都可以被看作一个小型的“机器”,即对象


      Objective-C是一门面向对象的计算机编程语言。


二、面向对象与面向过程比较

       面向过程:处理事务,主要以过程为核心。以把大象装进冰箱为例,如果想做好这件事情,就必须走三个步骤:

    1)打开冰箱

      2)把大象放进冰箱

        3)关闭冰箱; 

      那么这三个步骤,我们统称为过程。体现在计算机编程语言上就是面向函数,以函数的形式解决程序设计问题,利用的思想就是面向过程思想。著名的C语言就是面向过程性语言

       面向对象:利用面向对象思想处理事务时,往往看重的不是过程,而是对象本身,如果我想要做一件事,我应该立马想到什么对象能够办到,让这个对象来替我办这件事,而不是自己去实现。例如,我想把门打开,我就会去找“门”这个对象,因为打开门只有“门”自己能够办到,“打开”是一个动作,也是“门”的一个方法,而我们只是扮演了调用者的身份,并不用理会“门”是如何“打开”的,这些都交给对象本身了。相应的,体现在编程语言上,就是类与对象。传统的面向对象语言有:Objective-C、C++、Java、C#等。


三、类和对象的关系

        类是一组具有相同(特征)属性和行为(功能)的事物的集合(抽象)。对象就是类的具体实现。世间万物皆对象。类其实就是一种数据类型,它的变量就是对象。

        在OC中,类的定义分为两个部分:接口(@interface)和实现(@implementation)。

接口部分:

    1)声明了类与父类的名字      2)声明了成员变量   3)声明了成员方法  4)文件以.h结尾

例如

/*
 类名:Car
 属性:轮胎个数、时速(速度)
 行为:跑
 */

// 因为使用了NSObject
#import <Foundation/Foundation.h>


// 1.类的声明
// 声明对象的属性、行为
// : NSObject 目的是:让Car这个类具备创建对象的能力
@interface Car : NSObject
{// 用来声明对象属性(实例变量\成员变量,默认会初始化为0)
    // @public可以让外部的指针间接访问对象内部的成员变量
    @public
    int wheels; // 轮胎个数
    int speed; // 时速(xxkm/h)
}

// 方法(行为):方法名、参数、返回值(声明、实现)
// 只要是OC对象的方法,必须以减号 - 开头
// OC方法中任何数据类型都必须用小括号()扩住
// OC方法中的小括号():括住数据类型
- (void)run;

@end


实现部分:

    包含了方法的真正实现,是方法的具体表现形式。 实现文件以.m结尾。

  注意:.h文件、.m文件不要放在不同的文件夹,每一个.h文件对应一个.m文件是个好习惯~

例如:

// 2.类的实现
// 用来实现@inteface中声明的方法
@implementation Car
// 方法的实现(说清楚方法里面有什么代码)

- (void)run
{
    NSLog(@"车子跑起来了");
}

@end


对象的创建和使用:

           内存分配:为对象动态的分配内存地址。
               初始化:在内存中填上的初始值。

int main()
{
    // 在OC中,想执行一些行为,就写上一个中括号[行为执行者 行为名称]
    // 利用类来创建对象
    // 执行了Car这个类的new行为来创建新对象
    
    // 定义了一个指针变量p,p将来指向的是Car类型的对象
    // [Car new]每次都会创建出一个新对象,并且会返回新对象本身(新对象的地址)
    Car *p = [Car new];
    
    
    Car *p2 = [Car new];
    p2->wheels = 5;
    p2->speed = 300;
    [p2 run];
    
    // 给p所指向对象的wheels属性赋值
    p->wheels = 4;
    p->speed = 250;
    
    // 给p所指向对象发送一条run消息
    [p run];
    
    NSLog(@"车子有%d个*,时速位:%dkm/h", p->wheels, p2->speed);
    
    return 0;
}


四、详谈一下---方法

   1)不带参数的方法

// 方法声明
- (double)pi;
// 方法实现
- (double)pi
{
    return 3.14;
}

2)带一个参数的方法

	设计一个计算平方的方法
// 方法声明
- (double)square:(double)number;
// 方法实现
- (double)square:(double)number
{
    return number * number;
}

3)带多个参数的方法

	设计一个计算和的方法
// 方法声明
- (double)sumOfNum1:(double)num1 andNum2:(double)num2;
// 方法实现
- (double)sumOfNum1:(double)num1 andNum2:(double)num2
{
    return num1 + num2;
}


方法名注意:1)冒号也是方法名的一部分  2)同一个类中不允许两个对象方法同名

      

五、匿名对象(作为了解)

	属性访问
[Car  new]->speed = 200;
	方法调用
[ [Car  new]  run];

看得懂就好,不建议在代码中这么书写。