1.软件编程的实质
编程的实质就是将人类的思想转换成机器可以理解的语言的过程。
学习的核心问题就是掌握这种思维的方式。
OC是一种面向对象的语言。
2.对象
面向对象是相对面向过程而言。面向对象和面向过程都是一种思想。
例如洗衣服这件事的不同理解。
面向过程的方式去理解:准备衣服已经相关的用品,打开洗衣机,放入衣服和洗衣液,启动洗衣机。
面向 对象的理解方法:买个全自动洗衣机,准备要洗的衣物及用品。或者找个人帮你洗,呵呵。
面向过程:按人们认识客观世界的系统思维方式,采用基于对象(实体)的概念建立模型,
模拟客观世界分析、设计、实现软件的办法。通过面向对象的理念使计算机软件系统能与现实世界中的系统一一对应。
面向对象:是一种解决软件复用的设计和编程方法。这种方法把软件系统中相近相似的操作逻辑和操作应用数据、状态,
以类的型式描述出来,以对象实例的形式在软件系统中复用,以达到提高软件开发效率的作用。
它的优点是可以大幅度提高软件项目的成功率,减少维护的费用,提高可移植性和可靠性。
面向对象设计四个个主要特征
1、抽象性
2、继承性
3、封装性
4、多态性
二者的区别:
面向过程是把问题中的数据用算法进行描述,强调功能性;
面向对象是把功能封装进对象,强调问题的解决需要哪些对象的使用。
面向对象的编程思想是基于面向过程发展而来的,这是计算机程序设计发展到一定阶段的必然产物。
3.类和对象
class 类:类是具有相似内部状态和运动规律的实体的集合(或统称、抽象)。
对象(object):即指现实世界中各种各样的实体。它可以指具体的事物也可以指抽象的事物。
消息(Message):
消息是指对象间相互联系和相互作用的方式。一个消息主要由5部分组成:发送消息的对象、接收消息的对象、消息传递办法、消息内容(参数)、反馈。
例如施工图纸可以看成是房子的类,汽车设计图可以看成是车的类等,类是事物的一种抽象概况。
一个类可以实例化出多个对象。
类(Class) 一个类由3个部分构成:
类的名称:类名
类的属性:一组包含数据的属性
类的方法:允许对属性中包含的数据进行操作的方法
对象(object):
是系统中的基本运行实体;对象就是类类型(class type)的变量;
定义了一个类,就可以创建这个类的多个对象;一个类就是具有相同类型的对象的抽象;
类的抽象方法:一般可以用到名字抽象法,就是说名词一般都是一类。
小明玩电脑
人类-对象是小明 电脑是一类 玩-是小明的行为
4.类的声明和实现
在OC中类的定义有两部分:类的声明、类的实现。
.h:
类的声明文件,用于声明成员变量、方法。类的声明使用关键字@interface和@end。
注意:.h中的方法只是做一个声明,并不对方法进行实现。
也就是说,只是说明一下方法名、方法的返回值类型、方法接收的参数类型而已,并不会编写方法内部的代码。
.m:
类的实现文件,用于实现.h中声明的方法。类的实现使用关键字@implementation和@end。
方法的声明和实现,都必须以 + 或者 -开头:
+ 表示类方法(静态方法)
- 表示对象方法(动态方法)
在.h中声明的所有方法作用域都是public类型,不能更改。
成员变量的常用作用域有3种:
@public 全局都可以访问
@protected 只能在类内部和子类中访问
@private 只能在类内部访问
声明一个类 .h:
@interface Student : NSObject{
int age;
NSString * name;
}
-(void)goToClass;
@end
实现一个类 .m:
@implementation
-(void)goToClass{
NSLog(@"Goto class!");
}
@end
5.创建一个对象
用类的方式告诉了计算机我们需要一个什么样的对象,之后我们要在程序中使用这个对象,就必须先创建一个对象
Student *stu = 【Student new】;
只要是用new操作符定义的实体就在会堆内存中开辟一个新的空间。
【Student new】在内存中干三件事:
1.开辟存储空间
2.初始化成员变量
3.返回指针地址
通过 对象->对象成员(注意声明属性为:@public)的方式操作对象中的成员,对其中一个对象的成员进行了修改。和另一个对象没有关系。
6.无参数方法的声明与调用
OC中有类方法和对象方法。
对象方法:
对象方法是减号-开头的;
对象调用对象方法;
对象方法中可以访问当前的对象成员变量;
调用对象方法的格式 【对象名 对象方法名】
类方法:
类方法是加号+开头的;
类方法只能类去调用;
类方法中不可以访问成员变量,因为类在调用类方法的时候并没有分配内存空间,所以无法存储成员变量值;
调用的格式 【类名 类方法名】
类方法的好处和适用场合:
不依赖于对象,执行效率更高;
能用类方法解决的问题,尽量使用类方法;
场合:当方法内部不需要使用到成员变量时,可以改为类方法。
声明一个不带参数的对象方法:
-(void)goToClass;
【stu goToClass】;
或者
对象名 . 方法名 (点语法)
7.有参数方法的声明与调用
带参数的方法定义:
-(int) sum : (int) a and : (int) b;
-表示这是一个对象方法
int是返回值类型
sum: and: 是方法名。注意冒号也是方法名的一部分。
a b 是参数名
方法的调用:
【c sum:1 and:2】
c是一个指针变量名 ,给方法传递两个参数。
思考与实现:
定义一个电话类实现一些基础功能。
声明部分:
typedef enum color{White ,Black,colorTHJ} iColor;
@interface iPhone : NSObject{
iColor _color;
float _size;
}
-(void)aboutMyPhone;
-(void)call : (NSString *) num;
@end
实现部分:
@imlementation
-(void)aboutMyPhone{
NSLog(@"颜色 :%d,大小:%.2f ",_color,_size);
}
-(void)call : (NSString *) num{
NSLog(@"给 %@ 打电话。",num);
}
@end
调用部分:
iPhone *iph = [iPhone new];
[iph aboutMyPhone];
[iph call:"10086"];