1. 编程思想
C 面向过程 解决的是数学逻辑 按照步骤一步一步完成
比如开空调 1. 找到遥控器 2. 对准空调 3.按
我们 开 空调
开门 门是我们开的
OC Objective-C 面向对象思想 C++ JAVA C# ...
OOP Objective-oriented programming, 是一种思想,一种程序设计范例,将对象作为程序的基本单元,将程序和数据封装其中,提高软件的重用行,灵活性和可扩展性。
空调 对象
空调本身就具备了开这种状态,只是你给它发送了一个消息,它就进入了吹风的状态
门本来就具有开的这种状态,只是人给它发送了一个消息,它进入了它本来就有的这个状态,仅此而已
struct {float score, char name[256]}
->
object {float score, char name{256}, eat(), drink() …}
门 {
属性,特性:
颜色
大小
品牌
厂商
状态:
开
半开
关
}
体现生活
类Class 是对相同特点的对象的抽象
Person {
属性:耳目口鼻 … …
具有什么功能:
吃喝拉睡… 使用工具
}
类
Car {
属性:颜色,车型,轮胎,生产厂商,价钱 …
行为:跑 刹车 …
}
设计类体现这类东西的特性
Pig {
刹车
}
野猪 {
}
面向对象的三大特征:
封装:根据事物的属性和行为把客观事务封装成抽象的类(把属性和行为封装在类中)
继承:从一般到特殊,子类可以使用父类的数据和方法,类与类之间的关系。
多态:提供了同一接口的名字,重过重载实现不同的功能
SmallTalk
OC和C的关系和不同
OC兼容C, C的代码在OC中可以不加配置的使用
OC是C的超集
OC在C的基础上根据面向对象的思想作了一个高层次的封装, OC是C的超集(这并不是说C没用,更不是说C没有OC强大,同理我们也不能说C没有JAVA强大,C能办大事,只是我们现在可能还不能用它办大事,C不能办大事吗?操作系统就是用C写的)
施乐公司
NS NextStep
NSString
2. XCode
XCode
XCode默认可以编译C/C++/OC/--Swift--
XCode新建Command Line Tool项目
工程名命名规范 fdckfs ltdr
Product Name 工程名
Organization Name 公司(组织)名
Company Identifier 公司标识
Type 库环境
搜索和函数等
常用快键:
// 快捷:Command + 0 隐藏和显示左侧显示视图
// 编译 Command + b(build) Product -> build
// 运行 Command + r(run) Product -> run
// 搜索 Command + f 替换
// 打开右侧面板 command + option/alt + 0
.m
framework
工程目录,黄色的文件夹是虚目录
创建工程 new -> Project -> OX X -> command line tool
command + shift + n ...
NSLog %@ @autoreleasePool NSAutoreleasePool
编译command+b 运行command+r
debug区,控制台
OC函数,方法,消息
#include #import
BOOL id
3. 类的声明和定义(在main方法中)
声明类
创建对象
对象和对象指针
函数/方法/消息
堆栈区别 堆是动态内存分配,运行时,栈是静态内存分配,编译时
堆 栈
谁分配 程序员 系统
什么时候 运行时alloc 编译
在哪里 堆段 栈段
何时释放 手动释放 函数调用结束
4. 存取器方法setter & getter
成员变量的命名规则
通过方法访问成员变量
5. 区分类和对象
类就是对象的抽象
对象就是类的实例
6. 方法相关(消息)
方法命名规则
成员方法
带参方法
多参方法
7. 初始化方法/构造函数
多参
init
initWithName:(NSString *)name;
初始化方法的功能是给成员变量一些合理的初始化值
一般要和alloc一起使用,不要调用诸如[xxx init]这样的代码
注:alloc创建对象时会把堆空间的成员变量清零,即成员变量默认是0
8. self
self代表当前对象,或者说是代表当前对象地址
9. +方法和-方法
+开头的方法即类方法,或者说+方法,静态方法
类方法属于类,和对象无关
在+方法中,self还是代表当前对象吗?
所以确切的说,self代表当前方法的调用者。
+方法可以调用-方法吗?
-方法可以调用+方法吗?
对象能调用+方法吗?
10. self和super
self上面已讲过,super是一个编译器符号,不是指针,用它表示调用父类的方法
if (self == [super init]) {}
非常小的机率会返回nil, nil表示空对象指针,类似于c的NULL, 我们可以向nil发送任何消息,都没事,可以把nil看成个黑洞,无论什么东西进去都没反应。所以相对来说是安全一些的. 对于成员变量,如果这个变量是对象,它默认是nil.
可以用self = [self init]吗?
作业:
已知一辆汽车速度是20km/h,若令它行驶过一段1000km路程,需要多少小时?
编写一个加法器,它能够接收两个整数,然后输出两个整数的和。
有一个长方形MyRect类,它的字段有
int length;
int width;
int area;
方法有
设置长和宽
打印面积
实现这个类的设计
好一个正立方体,边长a为10;求它的体积volume.
(要求创建立方体时,使用构造函数进行初始化,构造函数,要求有带参和不带参,两个版本,不带参,边长默认为1。)
创建一个Dog类,成员变量有,int age; int weight; int height;
分别写三个set函数,给三个成员变量赋值。
再写一个set函数,同时给三个成员变量赋值。
再写一个show函数,打印三个成员变量的值。
有一个圆类,半径为r。
创建半径为5的圆对象。
打印圆的面积和周长。
编写一个四则运算器,从终端输入两个数和一个字符,可以进行加减乘除四则运算
小明手里有两张牌,左手红桃A,右手方片K,现在让小明交换两只手里的牌。问交换之后,小明左右手的牌,各是什么?
实现ATM机
C 面向过程 解决的是数学逻辑 按照步骤一步一步完成
比如开空调 1. 找到遥控器 2. 对准空调 3.按
我们 开 空调
开门 门是我们开的
OC Objective-C 面向对象思想 C++ JAVA C# ...
OOP Objective-oriented programming, 是一种思想,一种程序设计范例,将对象作为程序的基本单元,将程序和数据封装其中,提高软件的重用行,灵活性和可扩展性。
空调 对象
空调本身就具备了开这种状态,只是你给它发送了一个消息,它就进入了吹风的状态
门本来就具有开的这种状态,只是人给它发送了一个消息,它进入了它本来就有的这个状态,仅此而已
struct {float score, char name[256]}
->
object {float score, char name{256}, eat(), drink() …}
门 {
属性,特性:
颜色
大小
品牌
厂商
状态:
开
半开
关
}
体现生活
类Class 是对相同特点的对象的抽象
Person {
属性:耳目口鼻 … …
具有什么功能:
吃喝拉睡… 使用工具
}
类
Car {
属性:颜色,车型,轮胎,生产厂商,价钱 …
行为:跑 刹车 …
}
设计类体现这类东西的特性
Pig {
刹车
}
野猪 {
}
面向对象的三大特征:
封装:根据事物的属性和行为把客观事务封装成抽象的类(把属性和行为封装在类中)
继承:从一般到特殊,子类可以使用父类的数据和方法,类与类之间的关系。
多态:提供了同一接口的名字,重过重载实现不同的功能
SmallTalk
OC和C的关系和不同
OC兼容C, C的代码在OC中可以不加配置的使用
OC是C的超集
OC在C的基础上根据面向对象的思想作了一个高层次的封装, OC是C的超集(这并不是说C没用,更不是说C没有OC强大,同理我们也不能说C没有JAVA强大,C能办大事,只是我们现在可能还不能用它办大事,C不能办大事吗?操作系统就是用C写的)
施乐公司
NS NextStep
NSString
2. XCode
XCode
XCode默认可以编译C/C++/OC/--Swift--
XCode新建Command Line Tool项目
工程名命名规范 fdckfs ltdr
Product Name 工程名
Organization Name 公司(组织)名
Company Identifier 公司标识
Type 库环境
搜索和函数等
常用快键:
// 快捷:Command + 0 隐藏和显示左侧显示视图
// 编译 Command + b(build) Product -> build
// 运行 Command + r(run) Product -> run
// 搜索 Command + f 替换
// 打开右侧面板 command + option/alt + 0
.m
framework
工程目录,黄色的文件夹是虚目录
创建工程 new -> Project -> OX X -> command line tool
command + shift + n ...
NSLog %@ @autoreleasePool NSAutoreleasePool
编译command+b 运行command+r
debug区,控制台
OC函数,方法,消息
#include #import
BOOL id
3. 类的声明和定义(在main方法中)
声明类
创建对象
对象和对象指针
函数/方法/消息
堆栈区别 堆是动态内存分配,运行时,栈是静态内存分配,编译时
堆 栈
谁分配 程序员 系统
什么时候 运行时alloc 编译
在哪里 堆段 栈段
何时释放 手动释放 函数调用结束
4. 存取器方法setter & getter
成员变量的命名规则
通过方法访问成员变量
5. 区分类和对象
类就是对象的抽象
对象就是类的实例
6. 方法相关(消息)
方法命名规则
成员方法
带参方法
多参方法
7. 初始化方法/构造函数
多参
init
initWithName:(NSString *)name;
初始化方法的功能是给成员变量一些合理的初始化值
一般要和alloc一起使用,不要调用诸如[xxx init]这样的代码
注:alloc创建对象时会把堆空间的成员变量清零,即成员变量默认是0
8. self
self代表当前对象,或者说是代表当前对象地址
9. +方法和-方法
+开头的方法即类方法,或者说+方法,静态方法
类方法属于类,和对象无关
在+方法中,self还是代表当前对象吗?
所以确切的说,self代表当前方法的调用者。
+方法可以调用-方法吗?
-方法可以调用+方法吗?
对象能调用+方法吗?
10. self和super
self上面已讲过,super是一个编译器符号,不是指针,用它表示调用父类的方法
if (self == [super init]) {}
非常小的机率会返回nil, nil表示空对象指针,类似于c的NULL, 我们可以向nil发送任何消息,都没事,可以把nil看成个黑洞,无论什么东西进去都没反应。所以相对来说是安全一些的. 对于成员变量,如果这个变量是对象,它默认是nil.
可以用self = [self init]吗?
作业:
已知一辆汽车速度是20km/h,若令它行驶过一段1000km路程,需要多少小时?
编写一个加法器,它能够接收两个整数,然后输出两个整数的和。
有一个长方形MyRect类,它的字段有
int length;
int width;
int area;
方法有
设置长和宽
打印面积
实现这个类的设计
好一个正立方体,边长a为10;求它的体积volume.
(要求创建立方体时,使用构造函数进行初始化,构造函数,要求有带参和不带参,两个版本,不带参,边长默认为1。)
创建一个Dog类,成员变量有,int age; int weight; int height;
分别写三个set函数,给三个成员变量赋值。
再写一个set函数,同时给三个成员变量赋值。
再写一个show函数,打印三个成员变量的值。
有一个圆类,半径为r。
创建半径为5的圆对象。
打印圆的面积和周长。
编写一个四则运算器,从终端输入两个数和一个字符,可以进行加减乘除四则运算
小明手里有两张牌,左手红桃A,右手方片K,现在让小明交换两只手里的牌。问交换之后,小明左右手的牌,各是什么?
实现ATM机