//Objective-C面向对象的C语言。
//OC完全兼容C,凡是C语言代码可以直接编译在OC的工程当中。
【面向过程的语言】都是祈使句,直接和CPU沟通。目的是操作CPU,储存数据,管理数据。
//数学逻辑,就像小学解应用题,关注的是数据和管理数据。
【面向对象的语言】在程序中,添加能够接收消息的单元(对象),每个单元拥有自己的功能,各单元合作,完成程序。
//应用程序都是用(面向对象的语言编程)(OOP)的
//面向对象没有具体的官方定义。早期只使用【继承】【封装】【多态】编写程序的思想。后来,主要指将生活逻辑映射到程序当中。
【类和对象】
一.认识类(Class)和对象(Object)
//通过上面的描述,我们知道对象是接受信息的单元,是面向对象程序的核心。那么如何理解对象呢,类和对象是什么关系。
<1>生活逻辑
类 对象
人 你,我
电脑 你桌上那台 我桌上这台
超级英雄 美国队长 钢铁侠
外星人 奥特曼 擎天柱
<2>代码上看
//编写OC程序,需要使用集成开发工具Xcode
//File -> new -> project 创建新工程
//OS X -> Application(应用程序) -> command line tool(命令行程序)
//Mac OS工程名使用中文无所谓,iOS工程使用中文名会导致不可预知的错误,无法修复。
//Foundation是OC语言的基础框架,脱离Foundation框架,不能写出OC程序。
类:是一个自定义的类型,类似结构体或数组
对象:是使用类这个类型创建的变量
//类似结构体和结构体变量
<3>从封装的角度上看
结构体:对数据结构体的封装,负责存储数据
函数:对功能的封装,负责管理数据
类:同时对数据结构体和管理数据的方法进行封装,既能存储数据,又能自己管理数据。
//将结构体和函数结合起来就成了类。
<4>官方定义
类:同一类特征的对象的抽象。
对象:类的具体表现形式,或称具象。
二.构造方法
【注】OC中称所有init开头的方法为构造方法
【注】构造方法用于初始化对象,初始化对象的成员变量。
//PSBRect rect1, rect2;
//[rect1 init] self = &rect1;
//[rect2 init] self = &rect2;
三.直观地感受一下面向对象的程序
小明手里有两张牌,左手红桃A,右手黑桃K,问小明交换两手的牌,之后左右手各是什么牌?
三个 五个
电视剧:
1.选演员 找对象,实现对象
2.彩排 写程序流程
【类方法】
//类方法就是【静态方法】,方法不属于任何对像,为类所有。类方法中不能使用对象的成员。
【注】类方法就是C++中的静态方法,不属于任何一个对象,通过类名来调用。
- (void)show; //对象的方法
+ (void)show; //类的方法
[dog show];
//对象的消息,发送给对象
show(dog);
[Dog show];
//类方法用类名调用
【特征】
<1>类方法不能使用成员变量
<2>类方法不能调用对象的方法
【作用】
<1>创建对象[ alloc]
<2>对一个功能模块,留下简单的对外接口。
//流程可以实现在类方法中,返回结果
//类方法就类似main函数,是一个模块的“main函数”。
<3>声明单例对象
//全局变量存储的数据,为整个程序每个函数共享。
【问】如果用对象存储数据,能否声明成全局变量,使对象中的数据,为全程序共享?
【答】OC不允许对象静态内存分配,因此不能声明在数据段,不能声明成全局变量。
但是可以声明为单例对象,单例对象存储的数据,为全程序共享。
//单例和工厂是OOP中常用的设计模式