OC基础回顾(二)面向对象编程
面向对象编程:Object-Oriented Programming,缩写OOP。是一种编程技术,最初是为了编写模拟程序而开发。Objective-C是一种面向对象的语言。
间接,是OOP的一个关键概念,就是让其他人代替你去做某件事。
在面向对象编程中使用间接
间接是OOP的核心。OOP使用间接来获取数据(利用变量、文件和参数等)。OOP真正的革命性在于它使用间接来调用代码,不是直接调用一个函数,而是间接调用。只要理解了这一点,就理解了OOP的内涵,其他一切都是间接产生的引申概念。Objective-C中的OOP
创建某个特定类之前,Objective-C编译器需要一些有关该类的信息,尤其是对象的数据成员以及提供的功能。可以使用@interface指令把这些信息传递给编译器。
@interface Circle:NSObject
{
ShapeColor fillColor;
ShapeRect bounds;
}
含义:@interface行中的NSObject告诉编译器,Circle类是基于NSObject类的。该语句表明每个Circle类都是一个NSObject,并且每个Circle类都将继承自NSObject类定义的所有行为。
花括号中的内容,表示创建的新的Circle对象都由这两个元素构成。fillColor和bounds被称为Circle类的实例变量。
-(void)draw;
-(void)setFillColor:(ShapeColor) fillColor;
-(void)setBounds:(ShapeRect) bounds;
以上被称为 方法声明。
方法声明列出了每个方法的名称、方法返回值的类型和某些参数。参数的类型在圆括号中定义。
@end//Circle
最后一行代码告诉编译器,我们已经完成了类的声明。
虽然在@end后面添加注释不是必须的,但是我们还是提倡在@end后边提添加注释来标明类的名称。这样的话,通过注释就可以很容易地知道当前看的是什么。
- @implementation部分
通常,接口被称为API(application programming interface 首字母缩写)。而真正使对象能够运行的代码位于@implementation中。
@implementation Circle
@implementation是一个编译器指令,表示你将为这个类提供代码。@implementation后面是类名。该行结尾处没有分号,因为Objective-C编译器指令后不必使用分号。
可以在@implementation中定义那些没有在@interface中声明过的方法。把它们当做在仅能在当前类中使用的私有方法。但是要注意的是:Objective-C中不存在真正的私有方法,也无法把某个方法标识为私有方法来禁止其他代码调用。这是Objective-C动态本质的副作用。
实例化对象
实例化对象时,需要分配内存,然后将这些内存初始化并保存为有用的默认值,这些值不同于通过新分配的内存获得的随机值。内存分配和初始化工作完成后,就意味着新的对象实例已经创建好了。
由于对象的局部变量只在对象的实例中有效,因此我们称它们为实例变量,通常简写为ivar。
为了创建一个新的对象,我们需要向相应的类发送new消息,例如 [Circle new]就是实例化了一个Circle对象。扩展
剪切和粘贴的代码风格的一个缺点是容易出现大量的重复代码。例如Triangle类和Circle类都有setFillColor方法和setBounds方法。而继承就能有效地避免冗余代码。开放/关闭原则(Open/Closed Principle)
即软件实体应当对扩展开放,而对修改关闭。应对变化时,遵循开闭原则的软件会更加坚实耐用,因为你不必修改哪些正常运行的代码。