据我所知,Objective-C是一个面向对象的编程语言,而Categories是Objective-C提供的一个特性。
所以我想知道类别功能正在根据哪个OOP概念
提前致谢。
Mrunal
答案 0 :(得分:7)
@ Abizern的答案很好。我想补充一点,类别是动态调度的一种形式,特别是它们可用于扩展现有类而无需子类化。
也就是说,面向对象编程更像是一种设计哲学,而不是一组语言特性。有人可能会问“后缀增量对应的OOP功能是什么?”答案是“没有;这是一种语言特征。”类别主要不是用于实现OOP设计(尽管有时它们是如上所述)。他们最初的用途是打破大型实施文件。由于语言的缺陷(缺少@optional
),它们后来的用途是提供非正式协议。今天,它们主要用于沿特定于平台的行(NSString+UIStringDrawing
vs NSString+AppKitAdditions
)拆分代码。
扩展类似于类别,类似地主要是语言功能而不是OOP设计功能。它们在某种程度上促进了封装,但主要是在使用它们之前定义方法的任意编译器要求的副作用(我说“任意”因为这与设计或开发人员的需求无关;它只是简化了编译器)。不应将扩展与一些深层OOP要求相混淆。
因此,使用类别在运行时附加其他功能是动态调度。除此之外,它只是一种用于几种非OOP事物的语言功能。
答案 1 :(得分:3)
根据Buck和Yacktman的Cocoa Design Patterns book。 类别本身就是一种模式,也是Objective-C编程语言直接支持的模式。
答案 2 :(得分:1)
当谈到学术OOP概念时,可能最接近Encapsulation。但这确实显示了OOP的学术定义与OOP设计模式的实际世界之间的区别。