OC基础第二章:面向对象

来源:互联网 发布:php 手机回收网站源码 编辑:程序博客网 时间:2024/05/01 22:54

1、面向对象(object-oriented ;简称: OO)
定义为:按人们认识客观世界的系统思维方式,采用基于对象(实体)的概念建立模型,模拟客观世界分析、设计、实现软件的办法。通过面向对象的理念使计算机软件系统能与现实世界中的系统一一对应。
面向对象的几个名词:oop(面向对象编程),ooA(面向对象分析),OOD面向对象设计
2、面向对象的三大特性:封装、继承、多态
3、面向对象和面向过程的区别:
面向过程:强调的是功能行为,关注的是解决问题需要哪些步骤
面向对象:将功能封装进对象,强调具备了功能的对象,关注的是解决问题需要哪些对象,面向对象是基于面向过程的。

类(class): 类是具有相似内部状态和运动规律的实体的集合(或统称、抽象)。

1)类和对象之间的关系
类(Class) 一个类由3个部分构成
类的属性:一组包含数据的属性
类的方法:允许对属性中包含的数据进行操作的方法
类的名称:类名
是系统中的基本运行实体
对象就是类类型(class type)的变量
定义了一个类,就可以创建这个类的多个对象,一个类就是具有相同类型的对象的抽象。

方法:
+ 表示类方法 (静态方法)
- 表示对象方法(动态方法)
在.h中声明的所有的方法都是public修饰的,不能更改
成员变量(实例变量\属性)
成员变量的常用作用域有4种:
@public 全局都可以访问
@protected 只能在类内部和子类中访问
@private 只能在类内部访问
@package 用于框架之间

八、创建对象以及访问成员变量
在OC中创建对象
[Car new]//做了三件事情
1>、向计算机申请内存空间 对象存在于堆中
2>、给类中的每一个成员初始化值
3>、返回新申请空间的首地址,给指针p

Car *p=[Car new];
//理解1:定义一个Car类型的指针变量,该指针变量指向新申请的内存空间,
//理解2:用Car实例化了一个实例对象,对象的名称是p
2,一个对象在内存中是如何存储的?(先用文字解释,在画图说明)
比如:Car *p=[Car new ];p 是类Car的一个对象,它拥有类的变量和方法;
对象的成员(实例)变量存储在堆区
对象的方法存在代码区
对象的申请的空间在堆区
指针变量存放在栈区

类方法和对象方法
这里写图片描述

[car run ] 中得[]中括号在OC中是消息机制类方法的注意事项:1、  类方法可以和对象方法重名2、  类方法可以从父类继承而来,,子类重写类方法3、  类方法由类名去调用4、  类方法的声明在@interface里,实现在@implementation ,和对象方法一样5、  类方法不可以访问类的成员变量优点:节省内存空间提高效率作为工具方法
每一个对象都包含一个isa指针.这个指针指向当前对象所属的类。[p eat];表示给p所指向的对象发送一条eat消息,调用对象的eat方法,此时对象会顺着内部的isa指针找到存储于类中的方法,执行。isa是对象中的隐藏指针,指向创建这个对象的类。、函数和对象方法的区别对象方法:-(void)run;(1)对象方法的实现只能写在@implementation...@end中,对象方法的声明只能写在@interface...@end中间2)对象方法都以-号开头,类方法都以+号开头(3)对象方法只能由对象来调用,类方法只能由类来调用,不能当做函数一样调用(4)函数属于整个文件,可以写在文件中的任何位置,包括@implementation...@end中,但写在@interface...@end会无法识别,函数的声明可以再main函数内部也可以在main函数外部。5)对象方法归类,对象所有函数:void run(){}(1)所有的函数都是平行的(2)函数不存在隶属关系(3)使用的时候可以直接调用(4)不可以访问对象中的成员变量4,对象与方法之间存在哪几种关系?(最好写代码说明)对象作为方法的参数对象做方法的返回值一. NSString的创建和使用1,创建常量字符串,注意使用“@“符号。NSString *astring = @"This is a String!"; //后面的是常量,前面的是指针变量2NSString *s1 = [NSString new];//没有意义s1 =@"jian le ma";3、创建字符串的第三种方法//         格式化创建字符串(按照指定的格式创建字符串)NSString *imgName = [NSString stringWithFormat:@"xxxxxx%02d.jpg",i];4、用一个已经存在的字符串创建一个新的字符串NSString *s2 = [[NSString alloc] initWithString:s1];5.NSString长度计算方法.NSString *str = @"ban长";[str length];在OC 中字符串中英文都是一个字符5.匿名对象匿名对象的使用场景: 当对象的方法只调用一次时,可以使用匿名对象来完成。匿名对象优缺点 :优点: 可以简化代码,方便方法调用;节省内存空间缺点: 匿名对象实例化以后,只能正确的使用一次成员变量;四、封装:1.什么是封装:封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式2.封装的好处:将变化隔离。(不管里面怎么变,使用者不需要知道)便于使用。(使用者只需按照一定的方法使用就可以了)提高重用性。(任何人都可以对已封装好的功能进行操作)提高安全性。(由于暴露给使用者的只是一些外在的操作环节,而不是里面本质的东西,所以就提高了对他的维护性,也就是安全性)3.封装的原则:将不需要对外提供的内容都隐藏起来。把属性都隐藏,提供公共方法对其访问。第三节:关键字的用法一、  static关键字在OC中的使用static在C语言中 可以修饰局部变量 、全局变量 、函数static在OC中:1static在OC中不能修饰实例变量2、可以修饰全局变量,只能在本文件中去使用3、不能修饰方法(注意和其他语言的区别)4、可以修饰局部变量(和C中的用法一样)二.selfsuper1. self理解:   谁调用当前方法, self就代表谁.比如:  在对象方法中,self代表的是对象,  因为只有对象才可以调用对象方法在类方法中,  self代表的是类,  因为只有类名才可以调用类方法.注意:  在对象 方法中不要使用self调用类方法在类方法中不要使用self调用对象方法2. 获取当前对象的类:  Person *p = [Person p];[p class] = [Person class] = Person3. 在对象方法中可以通过 self->_speed访问成员变量.4.  super代表的是当前类的父类.
0 0