7.17
面向对象 -理解
是因为实际生活中,存在着很多问题,我们需要分析这些问题的过程抽象化,任何问题都有潜在的执行逻辑,
逻辑中会存在着能表达逻辑内容东西的对象存在,每一个对象都具有复杂的意义。
面向过程编程在分析问题的过程中,注重的是更加过程化的东西,但是面向对象把实际问题给抽象出来,然后给具体实现出来,我们
在分析问题的逻辑步骤中,去找完成解决问题的这些对象。
如何分析实际需求
1.任何问题都有潜在执行逻辑在内
2.把比较稳定的逻辑抽取出来
3.根据分析出来的逻辑步骤,去找完成每一步逻辑需要的对象
成员变量的作用域
@interface Person : NSObject {
/*
成员变量的作用域
<1.@public 完全公开成员变量
<2.@private 只有在自己内部才可以直接访问
<3.@protected 只有在自己或者子类内部才可以直接访问
成员变量默认都是@protected的
*/
// NSString *_name;
// int _age;
// @public
// int _number;
}
属性生成器
// 属性生成器 @property
/*
<1.自动的生成 getter和setter方法的 声明
<2.需要知道 参数类型和属性名称
<3.是编译器的特性
*/
例:@property int age;
// @synthesize 生成getter 和 setter方法,最为简单的实现
//@synthesize name = _name; // 跟成员变量 _name 绑定
//@synthesize age = _number; // 跟成员变量_number 绑定
// @synthesize age = _number;即
- (void)setAge:(int)age {
_number = age;
}
- (int)age {
return _number;
}
在点语法访问age的时候,得到的是_number的值
设置age的时候,设置的是_number的值
// xcode4.5之后代码变得简单
只需要写 @property int age;
系统会自动生成
//
//@implementation PersonTest {
// int _age;
// @implementation中可以声明成员变量,外部无法访问//}
//
//@synthesize age = _age;
//
//- (void)setAge:(int)age {
// _age = age;
//}
//- (int)age {
// return _age;
//}
// 当真的需要控制成员变量的值的时候,可以选择重写setter方法
// 如果setter 和getter 都重写了,@property就不会自动帮助我们生成以_开头的成员变量了
//@implementation PersonTest {
// int _age;
// @implementation中可以声明成员变量,外部无法访问//}
需要我们要自己声明
7.17下午
// 什么是多态性
<1.就是类的多种形态
<2.多态性依赖于继承关系而存在
<3.使用父类的指针变量,保存子类对象
<4.运行时机制,只有在程序真正运行起来的时候,才能看得到多态的作用
// 编辑状态下,你写出来的代码是什么,编译器就认为它是什么
// 使用父类的指针变量,保存子类对象
// 在程序运行的时候,动态的确定一个指针变量中存储的真实类型
id - 万能指针
// id比NSObject更加灵活
// id是万能指针,能够存储任意指针变量,不要再加 *符号
设计类方法
@interface Person : NSObject
@property NSString *name;
- (void)run;
- (id)initWithName:(NSString *)name;
+ (id)person;
+ (id)personWithName:(NSString *)name;
@end
#import "Person.h"
@implementation Person
- (void)run {
NSLog(@"他在跑");
}
- (id)initWithName:(NSString *)name {
self = [super init];
if (self) {
_name = name;
}
return self;
}
+ (id)person {
Person *person = [[self alloc]init];
return person;
}
+ (id)personWithName:(NSString *)name {
Person *person = [self person];
person.name = name;
return person;
}
@end
属性封装
最新推荐文章于 2022-09-26 11:25:14 发布