------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! ———
OC中的面向对象
面向对象编程概念
1、编程的实质是什么?
软件编程就是我们的思维转变成计算机能够识别的语言的一个过程。
2、面向对象的基本概念
面向对象是相对面向过程而言
面向对象和面向过程都是一种思想
Object Oriented Programing-OOP
1)面向对象的概念
定义
面向对象(object-oriented:简称:OO)至今还没有统一的概念,这里把它定义为:按人们认识客观世界的思维方式,采用基于对象(实体)的概念建立模型,模拟客观世界分析、设计、实现软件的办法。通过面向对象的理念使计算机软件系统能与现实世界中的系统一一对应。
面向对象编程(Object Oriented Programing—OOP)
是一种解决软件复用的设计和编程方法。这种方法把软件系统中相近相似的操作逻辑和操作应用数据、状态,以类的形式描述出来,以对象实例的形式在软件系统中复用,以达到提高软件开发效率的作用。
优点:
大幅度提高软件项目的成功率
减少维护费
提高可移植性和可靠性
面向对象设计三个主要特征
封装性
多态性
继承性
2)面向对象和面向过程的区别
面向过程
强调的是功能行为
关注的是解决问题需要哪些步骤
面向对象
将功能封装进对象,强调具备了功能的对象
关注的是解决问题需要哪些对象
面向对象是基于面向过程的。
3、类(class)和对象(Object)
类(class):
类是具有相似内部状态和运动规律的实体的集合(或统称、抽象)。类的概念来自于热门认识自然、认识社会的过程。在这一过程中,人们主要使用两种方法:由特殊到一般的归纳法和由一般到特殊的演绎法。在归纳的过程中,我们从一个个具体的事物中把共同的特征抽取出来,形成一个一般的概念,这就是“归类”;如:昆虫、狮子、爬行动物,因为它们都能动,所以归类为动物。在演绎的过程中我们又把同类的事物,根据不同的特征分成不同的小类,这就是“分类”;如动物->猫科动物->猫->大花猫等。对于一个具体的类,它有许多具体的个体,我们就管这些个体叫做“对象”。类的内部状态是指类集合中对象的共同状态;类的运动规律是指类集合中对象的共同运动规律。如:柏拉图对人作如下定义:人是没有毛能直立行走的动物。在柏拉图的定义中“人”是一个类,具有“没有毛、直立行走”等一些区别于其他事物的共同特征;而张三、李四、王五等一个个具体的人,是“人”这个类的“对象”。
对象(Object):
即指现实世界中各种各样的实体。它可以指具体的事物也可以指抽象的事物。如:整数1、2、3、苹果、飞机、法律、规则、表单等等。每个对象皆有自己饿内部状态和运动规律,如张三具有名字、身高、体重等内部状态,具有吃饭、睡觉、大人、偷税、漏税等运动规律。在面向对象概念中我们把对象的内部状态称为属性、运动规律称为方法或事件。
消息(message):
消息是指对象间相互联系和相互作用的方式。一个消息主要由5部分组成:发送消息的对象、接收消息的对象、消息传递办法、消息内容(参数)、反馈。
OC中描述事物通过类的形式体现,类是多个同种类型事物的抽象,概念上的定义。
例如:施工图纸,可以看做是房子的类
例2:汽车图纸,可以看做是汽车的类。按照图纸(类)生产汽车(对象)
所以,图纸(汽车类)和汽车(汽车对象)之间的关系如图;
例3:学籍系统:学生类和学生张三、李四之间的关系
所有学生都有姓名、年龄、班级等信息
我们也可以修改学生的姓名、年龄、班级信息
所以可以把学生姓名、年龄、班级—>抽象—>学生类的属性
把学生姓名、年龄、班级的修改和实现—>抽象—>学生类的方法
把学生张三、李四 ———————————>学生类的对象
总结:
一个类可以实例化多个对象
1)类和对象之间的关系
类(class) 一个类由3个部分构成
类的名称:类名
类的属性:一组包含数据的属性
类的方法:允许对属性中包含的数据进行操作的方法
对象(Object)
是系统中的基本运行实体
对象就是类类型(class type)的变量
定义了一个类,就可以创建这个类的多个对象
一个类就是具有相同类型的对象的抽象
4、类的构成
人的类的设计,只关心3样东西:
事物名称(类名):人(person)
属性:身高(height)、年龄(age)
行为(功能):跑(run)、打架(fight)
例如:芒果、苹果和桔子都是fruit类的对象
5、类的抽象
如何把生活中的事物抽象成程序中类?
拥有相同(或者类似)属性和行为的对象都可以抽象出一个类
方法:一般名词都是类(名词提炼法)
6、类的声明和实现
1)关于类的几个名词
类
.h:类的声明文件,用于声明成员变量、方法。类的声明使用关键字@interface和@end。
注意:.h中的方法只是做一个声明,并不对方法进行实现。也就是说,只是说明一下方法名、方法返回值类型、方法接收的参数类型而已,并不会编写内部的代码。
.m:类的实现文件,用于实现.h中声明的方法。类的实现使用关键字@implementation和@end。
方法
方法的声明和实现,都必须以+或者-开头
+ 表示类方法(静态方法)
- 表示对象方法(动态方法)
在.h中声明的所有方法作用域都是public类型,不能更改
成员变量(实例变量\属性)
成员变量的常用作用域有3种:
@public 全局都可以访问
@protected 只能在类内部和子类中访问
@private 只能在类内部访问
2)声明一个类
(1)声明类使用关键字@interface
(2)声明类,我们通常放到.h的头文件中
3)实现一个类
(1)实现一个类 使用关键字:@implementation
(2)实现一个类通常放到.m的文件中
(3)实现类主要是对方法的具体实现
/*
类:
一类事物共同特征和行为的抽象
大卡车 小轿车 挖掘机
车类: Car
共同的特征(属性): 颜色 速度 轮子
共同的行为: 跑 停止
对象:
类的具体的个体
东风21D(车类的对象)
解放大卡车(车类的对象)
BYD (车的对象)
时风 (车的对象)
2、类的定义
结构体定义
struct Student{
}; ---->定义一个Student 结构体
类的定义分为两部分:
1)类的声明(规定当前类的:类名、属性、行为)
@interface 类名:父类名
{
//定义类的属性
}
//类的行为
@end
2)类的实现(实现具体行为)
@implementation 类名
//行为的具体实现
@end
*/
#import <Foundation/Foundation.h>
//车的类的声明
@interface Car:NSObject
{
//类的属性
int lunzi; //车的轮子
NSString *color;//车的颜色
int speed; //车的速度
}
//类的行为
@end
//类的实现
@implementation Car
//行为的具体描述
@end
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
}
return 0;
}