黑马程序员——面向对象思想、设计类与创建对象、对象与函数、方法与函数、合理设计类
来源:互联网 发布:网站建设搜索优化 编辑:程序博客网 时间:2024/06/08 06:27
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
一、面向对象思想
1、面向对象与面向过程的区别
举例说明:去饭店吃饭找服务员是面向对象;去饭店吃饭考虑先到达饭店然后点菜然后做菜然后做好菜然后开始吃这个过程的话就是面向过程。
总结:面向过程关注的是解决问题需要哪些步骤;面向对象关注的是解决问题需要哪些对象。
一些常用术语:面向过程ProcedureOriented;面向对象Object Oriented,简称OO;面向对象编程Object Oriented Programming,简称OOP。
2、类和对象
举例说明:用图纸来设计车子,则图纸是类,车子是对象。OC中的类相当于图纸,OC利用类来创建对象。面向对象解决问题应该是先考虑需要设计哪些类,再利用类创建多少个对象
3、设计类
举例说明:设计人这个类,则类名:人(Person); 属性:身高(height)、年龄(age); 行为(功能):跑(run)、打架(fight)。
一般名词都是类。拥有相同(或者类似)属性和行为的对象都可以抽像出一个类。
注意:哪个对象最清楚这个行为,就把这个行为写到哪个对象中去。例如僵尸死了这个行为在僵尸这个对象中,不是向日葵。
二、第一个类——设计类和创建对象
1、类名书写规范
类名的命名规范:类名的第一个字母必须是大写;不能有下划线;多个英文单词,用驼峰标识。
2、类的声明:
@interface Car :NSObject //NSObject让这个类具有创建对象的能力。
{
//用来声明对象的属性(实例变量/成员变量属性默认为0)。
@public //加上之后可以允许外部指针间接访问对象内部的变量。
int wheels;
int speed;
}
//方法(行为):方法名,参数,返回值。放在interface和之间。
//只要是OC对象的方法都必须以减号-开头。
//OC方法中任何数据类型都必须要用小括号()括住。
-(void) run;
@end
3、类的实现:
@implementation Car
//方法的实现
NSLog(@"车子跑啊跑");
@end
4、用类来创建对象:
int main()
{
//在oc中想执行一些行为,就写上一个中括号[行为执行者行为名称]
//执行一个类的new行为是用来创建新的对象。
//定义了一个指针变量p,p将指向car类型的对象.
//[car new]会创建出一个新对象,并且会返回新对象本身的地址。
Car *p = [Car new];
p->wheels = 4; //给p所指向对象的wheels属性赋值。
p->speed = 250;
//给p所指向对象发送一条run消息。
[p run];
NSLog("车子又%d个轮子",速度为:%d",p->wheels,p->speed);
return 0;
}
5、程序和输出结果
#import<Foundation/Foundation.h>@interface Car :NSObject{ @public int wheel; int speed;}-(void) run;@end@implementation Car-(void) run{ NSLog(@"我的小车跑啊跑");}@endint main(){ Car *c = [Car new]; c->wheel = 4; c->speed = 100; NSLog(@"我有辆车,它有%d个轮子,速度可以达到%dkm/h",c->wheel,c->speed); [c run];}
三、第二个类——在方法里面调用成员变量
1、实例分析
/*人
类名:Person
属性(成员变量):身高,体重
行为(方法):走路
*/
/*类的声明
*成员变量
*方法的声明
*/
#import<Foundation/Foundation.h>
@interface Person : NSObject
{
@public
int age;
Double weight;
}
-(void)walk;
@end
@implementation Person
-(void)walk
{
NSLog(@"%d岁,%fkg的人走到西天去取经"。age,weight);
}
@end
int main()
{
Person *p =[Persom new];
p->age = 18;
p->weight =70;
[p walk];
Person *p2 =[Persom new];
p2->age = 20;
p2->weight =60;
[p2 walk];
return 0;
}
2、程序和输出结果
/*人 类名:Person 属性(成员变量):身高,体重 行为(方法):走路 *//*类的声明 *成员变量 *方法的声明 */#import<Foundation/Foundation.h>@interface Person : NSObject{ @public int age; double weight;}-(void)walk;@end@implementation Person-(void)walk{ NSLog(@"一个%d岁,%fkg的人走到西天去取经",age,weight);}@endint main(){ Person *p = [Person new]; p->age = 18; p->weight = 60; [p walk]; Person *p2 = [Person new]; p2->age = 28; p2->weight = 70; [p2 walk]; return 0;}
四、第三个类——OC对象与函数
1、实例程序分析
#import <Foundation/Foundation.h>@interface Car : NSObject{// 成员变量@public int wheels; int speed;}- (void)run;@end@implementation Car- (void)run{ NSLog(@"%d个轮子,速度为%dkm/h的车子跑起来", wheels, speed);}@endvoid test(int w, int s){ w = 20; s = 200;}void test1(Car *newC){ newC->wheels = 5;}void test2(Car *newC){ Car *c2 = [Car new]; c2->wheels = 5; c2->speed = 300; newC = c2; newC->wheels = 6;}int main(){ Car *c = [Car new]; c->wheels = 4; c->speed = 250; //test(c->wheels, c->speed); test1(c); // test2(c); [c run]; return 0;}
2、总结
方法列表是所有对象共用的,其在类中。
OC中的对象不能自动回收
五、常见错误总结
1、常见错误
只有类的声明,没有类的实现;漏了@end;@interface和@implementation嵌套;两个类的声明嵌套;成员变量没有写在括号里面;方法的声明写在了大括号里面
2、语法细节
成员变量不能在{}中进行初始化、不能被直接拿出去访问;方法不能当做函数一样调用;
成员变量\方法不能用static等关键字修饰,别跟C语言混在一起;类的实现可用写在main函数的后面,主要在声明后面就行了。
3、类的声明和实现的关系
@interface和@implementation的分工
@interface就好像暴露在外面的时钟表面
@implementation就好像隐藏在时钟内部的构造实现
六、方法和函数的区别
1、OC方法和函数的区别
OC方法只能声明在@interface和@end之间,只能实现在@implementation和@end之间。也就是说OC方法不能独立于类存在
C函数不属于类,跟类没有联系,C函数只归定义函数的文件所有
C函数不能访问OC对象的成员
低级错误:方法有声明,但是实现的时候写成了函数
2、OC的方法注意
方法只有声明,没有实现(经典错误)
方法没有声明,只有实现(编译器警告,但是能调用,OC的弱语法)
编译的时候:访问没有的成员变量直接报错,访问没有的方法,只是警告
七、类的合理设计
1、实例程序分析
typedef enum{ SexMan, SexWoman}Sex;typedef struct{ int year; int month; int day;} Date;#import<Foundation/Foundation.h>@interface Dog : NSObject{@public int weight;}- (void)run;- (void)eat;@end@implementation Dog- (void)run{ weight -=1; NSLog(@"%d",weight);}- (void)eat;{ weight +=1; NSLog(@"%d",weight);}@end@interface Student : NSObject{@public Sex sex; Date birthday; Dog *dog;}- (void)liuDog;- (void)weiDog;@end@implementation Student- (void)liuDog{ [dog run];}- (void)weiDog{ [dog eat];}@endint main(){ Dog *d = [Dog new]; d->weight = 20; Student *s = [Student new]; s->dog = d; [s weiDog]; [s liuDog];}
2、输出结果
3、总结
如果在一个类的成员变量中有一个是另一个类的对象,则这个成员变量(对象)可以使用其类的方法,即跨类调用方法。
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
- 黑马程序员——面向对象思想、设计类与创建对象、对象与函数、方法与函数、合理设计类
- 黑马程序员_面向对象思想分析与设计
- 黑马程序员 转载---> 面向对象与类之设计技巧
- 黑马程序员—面向对象与类
- 黑马程序员——函数与面向对象
- 面向对象分析与设计——类与对象
- 黑马程序员——面向对象2:类与对象
- 黑马程序员-类与面向对象的思想
- 面向对象与面向过程设计思想
- 黑马程序员-java与面向对象思想
- 黑马程序员——对象与函数
- 13-面向对象-类的设计与对象的创建
- 黑马程序员 笔记(五)——面向对象(概述、类与对象、封装、构造函数、this)
- 黑马程序员_JAVA之路5——面向对象1(类与对象关系、封装、构造函数、this)
- 黑马程序员_JAVA笔记05 ——面向对象1(类与对象关系、封装、构造函数、this)
- 黑马程序员——学习日志4面向对象(概念,类与对象,封装,构造函数,this关键字)
- 关于面向对象思想分析与设计
- 面向对象设计思想与 golang 编程
- 手动破解的 Linux下的Maltab 2014b
- 黑马程序员——OC知识点总结(一)
- Mac下 wine 打开程序中文乱码,亲测可用,故转载。
- 分布式缓存GemFire架构介绍
- 装了php(php-fpm)和nginx却无法显示php页面
- 黑马程序员——面向对象思想、设计类与创建对象、对象与函数、方法与函数、合理设计类
- c之排序问题---冒泡排序
- 偏爱MySQL,Nifty使用4个Web Server支撑5400万个用户网站
- 叠片过滤器:全自动叠片盘式过滤器介绍
- ASp.NET 自定义session
- 中国象棋-1.0开源啦
- MFC 中 CFile 类读写文件时拒绝访问
- 叠片过滤器:叠片除砂滤器设计选型及工艺要求概述
- Android笔记004_三层架构MVC和后台代码也分三层不一样