码迷,mamicode.com
首页 > 其他好文 > 详细

黑马程序员-----面向对象编程概念

时间:2015-12-21 01:58:39      阅读:289      评论:0      收藏:0      [点我收藏+]

标签:

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -----

 

第一讲   面向对象编程概念

 本小节知识点:

 1、【了解】编程的实质是什么?

 2、【掌握】面向对象的基本概念

      类    包    接口      继承      多态  

  面向过程是强调我们要做一件事情有哪些步骤,

  面向对象是强调我们做一件事情的话需要有哪些对象来帮我们完成,每个对象都完成它自己最擅长的东西。

)    

1、编程的实质是什么?

     软件编程就是将我们的思维转变成计算机能够识别的语言的一个过程。

      面向对象是相对面向过程而言。

      面向对象和面向过程都是一种思想。

       Object Oriented  Programming-OOP

 思考&实现1

      1)用洗衣机洗衣服用面向过程和面向对象的不同方式理解

      

          面向过程的

               打开洗衣机的盖

                放水

                脱衣服

                放肥皂

                放衣服

                盖上盖子

                启动洗衣机

 

           面向对象的

                  买个洗衣机

                  洗衣机自己打开盖子

                  洗衣机放水

                  人放衣服

                  洗衣机启动

 

                  

                  找个女朋友

                  让她帮你洗

 

 

 

             去饭店吃饭

             点菜

             自己炒菜

             自己端上来

             自己吃

              自己结账

 

              点菜

              厨师炒菜

              服务员端上来

              你吃

 

 

              汽车坏了

              买工具

               自己修车

               自己去测试

               

               把车拖到4s

               修车师傅去修

               提车

 

             买电脑

            自己查

            笔记本价格

            自己买

            自己收货

  

            找小白

            给小白老师钱

            找小白老师要电脑

 

  面向对象设计三个主要特征

       封装性

       多态性

       继承性

 面向对象和面向过程的区别:

      面向过程 :

                   强调的是功能行为

                   关注的是解决问题需要哪些步骤

      面向对象:

                   将功能封装进对象,强调具备了功能的对象。

                   关注的是解决问题需要哪些对象

                   面向对象是基于面向过程的。

        面向对象编程:

           是一种解决软件复用的设计和编程方法。

        优点:

             大幅度提高软件项目的成功率

             减少维护费

             提高可移植性和可靠性

 

第二讲 类(class)和对象(object)

本小节知识点:

1、【掌握】类(class)和对象(object

2、【掌握】类的构成

3、【理解】类的抽象

 

类(class):

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

 

对象(object):

        即指现实世界中各种各样的实体。它可以指具体的事物也可以指抽象的事物。

 

消息(Message):

        消息是指对象间相互联系和相互作用的方式。一个消息主要由5部分组成:发送消息的对象、接收消息的对象、消息传递办法、消息内容(参数)、反馈。

 

 OC中描述事物通过类的形式体现,类是多个同种类型事物的抽象,概念上的定义。

 

 例如:施工图纸,可以看作是房子的类   

          誰的房子  对象 

  

例如:汽车图纸 ,可以看作是类

        按照图纸生产的汽车就是 对象

        所以图纸(汽车类) 和汽车(汽车对象)

             

例如:学籍系统:学生类和学生张三、李四之间的关系

所有的学生都有姓名、年龄、班级等信息

我们也可以修改学生的姓名、年龄、班级信息

 

所以可以把学生的姓名、年龄、班级--->抽象---->学生类的属性

             把对学生姓名、年龄、班级的修改和现实---->抽象----->学生类的方法

             把学生张三、李四   -------->学生类的对象

 

总结:

      一个类可以实例化多个对象。

 

类和对象之间的关系

类(class  一个类由三个部分构成

                 类的名称:类名

                 类的属性: 一组包含数据的属性

                 类的方法:  允许对属性中包含的数据进行操作的方法

 

对象(object):

             是系统中的基本运行实体

             对象就是类类型(class type)的变量

             定义了一个类,就可以创建这个类的多个对象

            一个类就是具有相同类型的对象的抽象

 

类的构成

    人的类设计,只关心3样东西:

    事物名称(类名):人(Person

    属性:身高(height)、年龄(age

    行为(功能):跑(run)、打架(fight

 

   厨师:(CHUSHI 

   厨师属性: 姓名  年龄   菜系  级别

   行为:  炒菜

 

修理工:

 

狗类   类名

名字

性别      属性,特征

 毛色 

奔跑     方法,行为

 

3.类的抽象

如何把日常生活中的事物抽象成程序中类?

拥有相同(或者类似)属性和行为的对象都可以抽象出一个类

方法:一般名词都是类(名词提炼法)

    

             坦克发射3颗炮弹轰掉了2架飞机

              坦克  炮弹  飞机

              发射炮弹  

              打飞机

  

            小明在公车上牵着一条叼着热狗的狗

              公交车    热狗

         

思考&实现1

 1)试着将下面的实体抽象成类 (注意类包括:类名、属性、行为)

 老师

类名:Teacher

属性:姓名、年龄、性别、所教的课程  工资   教龄

行为: 上课 批改作业 考试

 

 僵尸

类名:jiangShi

属性:攻击力  血量

行为:跳  吸血

 

电脑

类名:Computer

属性:品牌  颜色  尺寸   分辨率

行为:看电影 打游戏

 

类名:Car

属性:颜色  轮子

行为:   刹车

 

学生

类名:Student

属性:姓名、年龄、班级、性别

行为:跷课   谈恋爱 打游戏

 

  第三讲  类的声明和实现

本小节知识点:

1、【理解】关于类的几个名词?

2、【掌握】声明一个类

3、【掌握】实现一个类

 

OC中类的定义有两部分:类的声明、类的实现

          结构体:

          struct Person{

           char   name[20];

           int age;

          };

 

1、关于类的几个名词

  类

 .h:  类的声明文件,用于声明成员变量、方法。类的声明使用关键字@interface@end

 注意:  .h中的方法只是做一个声明,并不对方法进行实现。也就是说,只是说明一下方法名、方法的返回值类型、方法接收的参数类型而已,并不会编写方法内部的代码。

 

.m :类的实现文件,用于实现.h中声明的方法。类的实现使用关键字@implementation@end

 

方法

 方法的声明和实现,都必须以 + 或者 - 开头

   +    表示类方法(静态方法)

   -     表示对象方法(动态方法)

  .h中声明的所有方法作用域都是public类型,不能更改

 

成员变量(实例变量\属性)

成员变量的常用作用域有3钟:

@public  全局都可以访问

@protected 只能在类内部和子类中访问

@paivate 只能在类内部访问

 

2、声明一个类

1)声明类使用关键字@interface

2)声明类,我们通常放到.h的头文件中

  1 /*
  2 
  3     类:
  4 
  5          一类事物共同特征和行为的抽象
  6 
  7            
  8 
  9           大卡车    小轿车      挖掘机
 10 
 11  
 12 
 13          车类: Car
 14 
 15          共同的特征:  颜色  速度  轮子
 16 
 17          共同的行为:  跑    停止
 18 
 19  
 20 
 21     对象:
 22 
 23            类的具体的个体
 24 
 25            东风21D(车类的对象)
 26 
 27            解放大卡车(车类的对象)
 28 
 29            BYD(车的对象)
 30 
 31  
 32 
 33 2、类的定义
 34 
 35   
 36 
 37 结构体定义
 38 
 39 struct Student{
 40 
 41   
 42 
 43   };---->定义一个Student结构体
 44 
 45     
 46 
 47      类的定义分为两部分:
 48 
 49          1)类的声明(规定当前类的:类名  属性  行为)
 50 
 51             @interface   类名:父类名
 52 
 53           {
 54 
 55            //定义类的属性
 56 
 57          }
 58 
 59         //类的行为
 60 
 61 @end
 62 
 63          2)类的实现(实现具体行为)
 64 
 65             @implementation 类名
 66 
 67             //行为的具体实现
 68 
 69             @end
 70 
 71 */
 72 
 73 #import <Foundation/Foundation.h>
 74 
 75       //车的类
 76 
 77      @interface Car:NSObject
 78 
 79  {
 80 
 81  //类的属性
 82 
 83  int  lunzi;      //车的轮子
 84 
 85  //char *color;
 86 
 87  NSString *color;  //车的颜色
 88 
 89  int speed;        //车的速度
 90 
 91  }
 92 
 93    //类的行为
 94 
 95  @end
 96 
 97    //类的实现
 98 
 99    @implementation Car
100 
101      //行为的具体描述
102 
103     @end

 

 

 

第四讲  创建一个对象并访问成员变量

接着上面所讲的

  1 /*
  2 
  3     在OC中用已经存在的类,如何创建一个对象?
  4 
  5     回顾c结构体,结构体如何创建结构体变量
  6 
  7    struct Student stu;  //stu就是结构体变量   
  8 
  9    struct  Student *pstu;  //pstu = &stu;
 10 
 11   结构体指针访问   结构体变量中的成员变量值
 12 
 13  pstu->age = 20;   //给 age 设置 值是20
 14 
 15  OC中对象创建
 16 
 17 [Car new];  
 18 
 19 //做了三件事情
 20 
 21 //1.向计算机申请内存空间
 22 
 23 //2.给类中的每一个成员初始化值
 24 
 25 //3.返回新申请的空间的首地址
 26 
 27     //理解方式一:
 28 
 29     //定义了一个Car类型的指针变量
 30 
 31     //指针变量指向新申请的内存空间
 32 
 33     //理解方式二:
 34 
 35     //用Car类实例化了一个实例对象,对象的名称是p
 36 
 37      Car  *p = [Car new];
 38 
 39 */
 40 
 41 #import <Foundation/Foundation.h>
 42 
 43       //车的类
 44 
 45      @interface Car:NSObject
 46 
 47  {
 48 
 49   //类的属性      
 50 
 51  @public
 52 
 53  int  lunzi;      //车的轮子
 54 
 55  //char *color;
 56 
 57  NSString *color;  //车的颜色
 58 
 59  int speed;        //车的速度
 60 
 61  }
 62 
 63    //类的行为
 64 
 65    @end
 66 
 67    //类的实现
 68 
 69     @implementation Car
 70 
 71      //行为的具体描述
 72 
 73     @end
 74 
 75  
 76 
 77 int main(int argc,const char *argv[]){
 78 
 79     @autoreleasepool{
 80 
 81    //创建Car类型的对象 car1
 82 
 83    Car *car1 = [Car new];   
 84 
 85    //创建一个对象 实质还是指针(用指针间接访问实例变量)
 86 
 87    car1->lunzi = 3;
 88 
 89    car1->speed l= 150;
 90 
 91    car1->color = @"蓝色";
 92 
 93    //    查看车的信息
 94 
 95     NSLog(@"轮子: %d,速度: %d,颜色: %@\n",car1->lunzi,car1->speed,car1->color);
 96 
 97 }
 98 
 99 return 0;
100 
101 }

 

 

第五讲  无参方法声明实现及调用

 

  1 /*
  2 
  3      C语言的函数分类:
  4 
  5      无参无返回值
  6 
  7      无参有返回值
  8 
  9      有参无返回值
 10 
 11      有参有返回值
 12 
 13 
 14 
 15       类和对象的概念
 16 
 17       类的定义
 18 
 19       @interface Car:NSObject
 20 
 21      { 
 22 
 23           int  lunzi;
 24 
 25           int  speed;
 26 
 27           NSString *pp;
 28 
 29       }
 30 
 31      //行为
 32 
 33    @end
 34 
 35    对象的创建
 36 
 37 */
 38 
 39 #import <Foundation/Foundation.h>
 40 
 41   //Car类的声明
 42 
 43  @interface Car:NSObject
 44 
 45  {
 46 
 47    int  lunzi;      //车的轮子
 48 
 49   int speed;      //车的速度
 50 
 51   NSString *pp;    //车的颜色 
 52 
 53  }
 54 
 55     //行为
 56 
 57    //车跑的方法  方法名是run
 58 
 59    -(void)run;   //定义了一个无参无返回值的方法
 60 
 61    -(void)stop;
 62 
 63   @end
 64 
 65     //类的实现
 66 
 67     @implementation Car
 68 
 69      //行为的具体描述
 70 
 71  -(void)run{
 72 
 73         NSLog(@"车跑在乡间的大道上");
 74 
 75    }
 76 
 77  
 78 
 79  -(void)stop{
 80 
 81       NSLog(@"咯吱,车停了!");
 82 
 83    }
 84 
 85    @end
 86 
 87  
 88 
 89  int main(int argc,const char *argv[]){
 90 
 91         @autoreleasepool{
 92 
 93         //创建Car类型的对象 car
 94 
 95        Car *car = [Car new];
 96 
 97        //调用方法
 98 
 99        [car run];
100 
101        //调用stop方法
102 
103       //向car对象发送stop消息
104 
105       [car stop];
106 
107 }
108 
109 return 0;
110 
111 }

 

 

OC中的方法分别为:对象方法和类方法

 

对象方法

        1.对象方法以 - 开头如  -(void) xx;

        2.对象方法只能由对象来调用

        3.对象方法中可以访问当前对象的成员变量

        4.调用格式   [对象名   对象方法名];

        5.设计一个学生类和狗类,练习对象方法的使用

  

类方法

         1.类方法以 + 开头  +(void) put;

         2.类方法只能由类来调用

         3.类方法中不能访问实例(成员)变量,因为类方法由类来调用,并没有创建存储        

            空间来存储类中的成员变量

         4.调用格式:[类名  类方法名];

         5.类方法的好处和适用场合;

          不依赖于对象,执行效率更高;

 

 第六讲  有参方法声明实现及其调用

本小节知识点:

1、【掌握】有参方法声明和实现

2、【掌握】方法的调用

 

1、有参方法声明和实现

 2、方法的调用      

  1 /*
  3    C的函数
  5    int  sum (int x,int y){    
  7       return x+y;
  9     }
 10 
 13    OC的方法
 14 
 15  -(返回值类型)方法名1:(参数类型) 参数名;    //有一个参数的方法 
 16 
 17  -(返回值类型)方法名1:(参数类型) 参数名1  and:(参数类型2) 参数名2; //有两个参数的方法
 18 
 21 //sum ---->  OC的方法
 22 
 23 -(int)sum:(int) x and: (int) y;   //方法的声明
 24 
 27  //有参方法的使用注意:
 28 
 29 //方法的类型   (-)对象方法
 30 
 31 //方法的返回值:  int 类型
 32 
 33 //方法的参数是:  x  y
 34 
 35 //参数的类型:  第一个 int  第二个 int
 36 
 37 //方法名:     sum:  and:   (冒号是方法名的一部分)
 38 
 41  //方法的实现
 42 
 43 -(int)sum:(int) x and:(int) y{
 44 
 45   return x+y;  
 47 }
 49 */
 53 #import <Foundation/Foundation.h>
 54 
 55 //写一个计算器的类
 57 // 类名: Caculator
 58 
 59 //实例变量 num1  num2
 60 
 61 // 行为:  +  -  *  /

 65 @interface Caculator : NSObject
 67 {
 69 //实例变量书写规范
 71 @public
 73 int _num1; //数据类型 _实例变量名
 75 int _num2;
 77 }

 81  //写一个没有参数的方法
 83 -(int)sum;   //没有参数,返回值是int类型
 87 //有参方法的声明
 89 -(int)sum: (int) x and:(int) y;
 91 @end
 92 
 95 @implementation Caculator
 96 
 97 //方法名 sum
 99 -(int)sum{
100 
103 //计算 _num1 + _num2;
105 return _num1 + _num2; 
107 }
108 
109 //方法名 sum:  and:
110 
111 -(int)sum: (int) x and:(int) y{
112 
113      return x+y;
115 }   
117 @end
118 
121 int main (int argc,const char *argv[]){
122 
123     @autoreleasepool{
124 
125  //创建对象
126 
127 Caculator *ca = [Caculator new];
128 
131 //对象访问实例变量
133 ca->_num1 = 12;
135 ca->_num2 = 30;
136     
139 //调用无参方法
141 int s = [ca sum];
145 //调用有参的方法
147 s = [ca sum: 34 and: 23];
149    NSLog(@"s = %d",s);
151 } 
153 return 0;
155 }

 

 

思考&实现1

类名:苹果手机(Iphone)

属性:颜色(_color),大小(_size),_cpu

行为:查看本机信息(aboutMyPhone),打电话(call),发短信(sendMessage)

 

实现该类,并:

1)查看本机信息

2)打电话给10086

3)10086发短信问联通的客服电话是多少

  1 /*
  3    类名:苹果手机(iPhone)
  4 
  5    属性:颜色(_color),大小(_size),_cpu
  6 
  7    行为:查看本机信息(aboutMyPhone),打电话(call),发短信(sendMessage)

 11    实现该类,并:
 12 
 13    1)查看本机信息
 14 
 15    2)打电话给10086

 17    3)给10086发短信问联通的客服电话是多少
 19 */

 23 #import <Foundation/Foundation.h>

 27 typedef enum  color{kColorWhite,kColorBlack,kColorTHJ} iColor;
 28 
 29 //iPhone 类的声明
 30 
 31 @interface iPhone : NSObject
 33 {
 35 @public
 37  //类的属性(实例变量、成员变量)
 39  //手机的颜色 
 41 iColor _color;
 43 //手机的尺寸
 45 float _size; 
 47 //手机的cpu 
 49 NSString *_cpu; 
 51 }  
 53    //类的方法(方法)的声明 
 55    //查看手机的信息   实质:把手机的实例变量值打印出来
 57   -(void) aboutMyPhone;
 59    //打电话,需要一个参数,参数就是一个电话号码
 61   -(void) callPhone:(NSString *) telNum;
 63    //发短信,给指定号码发送 短信, 短信内容可以指定
 65   -(void) sendMessage:(NSString *) telNum andContent:(NSString *) content;  
 67 @end
 69  //iPhone 类的实现
 71 @implementation iPhone
 73  //查看手机的信息   实质:把手机的实例变量值打印出来 
 75  -(void) aboutMyPhone{ 
 77     NSLog(@"颜色: %d,尺寸: %.2f,cpu:%@",_color,_size,_cpu);
 79 }
 81 //打电话,需要一个参数,参数就是一个电话号码
 83 -(void) callPhone:(NSString *) telNum{
 85     NSLog(@"给%@ 打电话!",telNum);
 87 }

 89 //发短信,给指定号码发送 短信, 短信内容可以指定
 91 -(void) sendMessage:(NSString *) telNum andContent:(NSString *) content{ 
 93       NSLog(@"给 %@ 发送短信,短信内容: %@",telNum,content);
 95 }
 97 @end

101 int main(int argc,const char *argv[]){
105 @autoreleasepool{
106 
107  //创建对象
109  iPhone *iphone1Plus l= [iPhone new];
110 
111  //设定手机的信息
113  iphone7Plus->_color = kColorTHJ;
115  iphone7Plus->_cpu = @"A20";
117  iphone7Plus->_size = 7.9f;
118 
121  //调用方法
123  [iphone7Plus aboutMyPhone];

127  //给10086打电话
129  [iphone7Plus callPhone:@"10086"];

133  //给10086发短信
135  [iphone7Plus sendMessage:@"10086" andContent:@"您好,请问联通客服电话是多少?"];  
137 }
139 return 0;
141 }

 

第七讲   类的创建练习

思考&实现1:

   一个人可以吃不同的食物,只要吃东西就会增加体重0.6,如果要是出门遛弯,每走100步,体重减0.2,小于100步忽略不计。请用面向对象思想实现。

 

思路:

类名: Person

属性:   年龄(_age)   体重(_weight)

动作吃饭(eat)方法   散步(walk)方法

功能人可以吃各种食物

         每次散步,让体重-0.2

 

 1 /*
 2  类名: Person
 3  属性:   年龄(_age)   体重(_weight)
 4  动作: 吃饭(eat)方法   散步(walk)方法
 5  功能: 人可以吃各种食物
 6  每次散步,让体重-0.2
 8  */
12 #import <Foundation/Foundation.h>
13 //Person类的声明
14 @interface Person : NSObject
15 {
16     @public
17     //类的实例变量(属性、成员变量)
18     NSString *_name;
19     int _age;      //年龄
20     float _weight; //体重
21 }
22 //定义人的行为
23 -(void)eat:(NSString *) foodName;
24 //散步
25 -(void)walk:(int) num;
26 @end
27 
28 //Person类的实现
29 @implementation Person
30     //定义人的行为
31     -(void)eat:(NSString *) foodName{
32    //吃饭以后,体重要在原来的基础上增加0.6
33     _weight += 0.6f;
34     NSLog(@"您吃了%@,当前体重为%.2f",foodName,_weight);
35 }
36       //散步
37     -(void)walk:(int) num{
38     //每走100步  体重减去0.2
39     //234步  0.4 = 0.2*2
40     //num / 100 *0.2f;
41     _weight -= num/100 *0.2f;
42     NSLog(@"您走了%d步,当前体重为:%.2f",num,_weight);
44 }
46 @end
47 
48 int main(int argc, const char * argv[])
49 { 
51     @autoreleasepool {
52         
53        //创建对象
54        //[Person new];
55        //开空间 初始化  返回空间的首地址
56         Person *p = [Person new ];
57         
58        //设置对象的实例变量的值
59         p->_name = @"史泰龙";
60         p->_weight =  180.0f;
61         p->_age = 18;
62         
63         [p eat:@"四川麻辣烫"];
64         [p eat:@"回锅肉"];
65         [p walk:234    ];
66     }
67     return 0;
68 }

 

黑马程序员-----面向对象编程概念

标签:

原文地址:http://www.cnblogs.com/xiaokang520/p/5062337.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!