面向对象笔记

一、匿名对象

//        Car *car = [Car new];
//        [car run];  //调用方法
//        car->_speed = 250;  //设定实例变量的值
//        NSLog(@"_speed = %d",car->_speed);
        
        //匿名对象
        //匿名对象的使用
        // 1) 可以访问实例变量
        // 注意:使用匿名对象访问实例变量,只能正确地使用一次
        
        [Car new]->_speed = 180;
        
        NSLog(@"_spped = %d",[Car new]->_speed); //0   [Car new]; 又分配了新的内存空间
        
        // 2) 可以调用方法
        [[Car new] run];
        
        //申请空间,并且初始化
        Car *bigBen = [[Car alloc] init];
        
        //注意:alloc init 等价于  new

二、封装性

所谓封装,就是把一个事物包装起来,使外界不了解它的内部的具体情况。
在面向对象的程序设计中,封装就是把相关的数据和代码结合成一个有机的整体,形成数据和操作代码的封装体,对外只提供一个可以控制的接口,内部大部分的实现细节对外隐蔽,达到对数据访问权的合理控制。
封装使程序中个部分之间的相互联系达到最小,提高了程序的安全性,简化了程序代码的编写工作,是面向对象程序设计的重要原则。

面向对象程序设计的封装机制是通过对象来实现的。对象中的成员不仅包含了数据,也包含了对这些数据进行处理的操作代码。对象中的成员可以根据需要定义为公有 的或私有的,私有成员在对象中被隐蔽起来,对象以外的访问被拒绝,公有成员提供了对象与外界的接口,外界只能通过这个接口与对象发生联系。可见,对象有效 地实现了封装的两个目标:对数据和行为的结合和信息隐蔽。
抽象和封装是互补的。一个好的抽象有利于封装,封装的实体则帮助维护抽象的完整性。但抽象先于封装

三、继承与封装的关系

对象具有封装性,对象的私有成员是被隐藏的,那么,引入继承机制不就削弱了封装性?继承与封装不就茅盾了吗?回答是否定的。
一方面,继承机制并不影响对象的封装性。封装的单位是对象,是将属于某个类的一个对象封装起来,使其操作和数据成为一个整体。如果该对象所在的类是派生类,这个派生类只要把从基类那里继承来的数据和操作与自己的数据和操作一并封装起来就行了,对象依然是一个封装好的整体,仍然只能通过消息传递与别的对象交互,不能直接调用。可见,在引入继承机制以后,无论对象是基类的实例还是派生的实例,都是一个被封装的实体,继承并不影响封装性。
另一方面,继承和封装都提供了共享代码的手段,增加了代码的复用性。只不过,继承的代码共享是静态的,当派生类对象被激活以后,自动共享其基类中的代码,从而实现基类对象与派生类对象共享一段代码。而封装的代码共享是动态的,当在一个类中说明了一段代码,属于该类的多个实力在程序运行时共享这段代码。

四、多态性

多态性是面向对象程序设计的重要特性之一,是指不同的对象受到相同的消息时产生不同的操作行为,或者说同一个消息可以根据发送消息的对象的不同而采用多种不同的操作行为。
例如,当用鼠标单击不同的对象时,各对象就会根据自己的理解作出不同的动作,产生不同的结果,这就是多态性。简单地说,多态性就是一个接口,多种方式。

五、对象间关系

对象间关系有组合关系、依赖关系、关联关系

你可能感兴趣的:(面向对象笔记)