zoukankan      html  css  js  c++  java
  • 面向对象、继承

    OOP中的一些关键概念
     
    间接(indirection):在代码中通过指针间接获取某个值,而不是直接获取。
    NSLog()的编写者添加适当的添加%@格式的说明符,是为了通知NSLog()接受适当的参数,将其作为NSString,并使用该字符串中的字符,将其发送到控制台中。
    过程式编程建立在函数之上,数据为函数服务,而面向对象编程则以程序的数据位中心,函数位数据服务。在OOP中,不在重点关注程序中的函数,而是专注于数据。
     
    看一段代码
    void drawShapes(id shapes[], int count)
    {
         for (int i = 0; i < count; ++i) {
             id shape = shapes[i];
              [shape draw]; 
         }
    }
    这里的第一个参数shapes[]是一个id数组对象,id可以理解为标识符。id是一种泛型,可以用来引用任何类型的对象。
    倒数第三行中的方括号的意义:用于通知某个对象该区做什么。方括号里的第一项是对象,其余部分是需要对象执行的操作。在OC中,通知对象执行某种操作称为发送消息(也可以理解为“调用方法”)。
    对象是消息的目标,需要查找出它属于哪一个类;在Circle类中浏览器代码,查找draw函数的位置;找到draw函数后,执行绘制圆形的函数。
    类(class) 对象(object) 实例(instance) 消息(message) 方法(method) 方法调度(method dispatcher)
    接口(interface) 实现(implementation)
     
    - (void) draw; 前面的短信表明这是OC方法的声明,这是区分函数原型与方法声明的一种方式,函数原型中没有先行短线。短线后面是方法的返回类型,位于圆括号中。
    @interface Circle告诉编辑器这是新类Circle的接口。
    @implementation是一个编译器指令,表明你将为某个类提供代码。雷鸣出现在@implemention之后。该行的结尾处没有分好,因为在OC编译器指令后不必使用分号。
     
    为了创建一个新的对象,需要向相应的类发送new消息。该类接受并处理完new消息后,就会得到一个可以处理的新对象实例。
     
    shapes[i] = {Rectangle new};//new一个对象
    [shapes[i] setFillColor:kGreenColor];
    //调用对象shapes[i]的setFillColor方法,并传入参数,感觉语法很奇葩
     
    OC不支持多继承哦。
     
    对象引用其他对象时,可以利用其他对象提供的特性,这就是复合。
     
    当代码发送消息时,oc的方法调度机制将在当前的类中搜索相应的方法。如果无法在接受消息的对象的类文件中找到相应的方法,它就会在该对象的超类中进行查找。
     
    有了对象基地址,即第一个实例变量的首个字节在内存中的位置,再在地址上加上偏移地质,编译器就可以查找其他实例变量的位置。
     
     
     
  • 相关阅读:
    POJ
    FZU
    HDU
    HDU
    HDU
    HDU
    Educational Codeforces Round 84 E. Count The Blocks
    B Boundary(由弦求圆)
    D. Maximum Sum on Even Positions(翻转1次,求最大偶数位和)
    E. DeadLee(思维,拓扑图处理)
  • 原文地址:https://www.cnblogs.com/tcsong24/p/5628681.html
Copyright © 2011-2022 走看看