01 对象导论

本文介绍了面向对象编程(OOP)的基本概念,包括类、高内聚、隐藏、复用实现、继承、多态等内容,并探讨了单继承的重要性及容器的使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、什么是类?

       类是描述具有相同特性(数据元素)和行为(功能)的对象集合


2、高内聚

      每个对象都有它提供的服务的内聚集合(通过对象去调用对应的行为)。

      高内聚是软件设计的基本质量要求之一。


3、隐藏的必要

      一个类的设计,需要对其数据的安全负责,可以理解为访问的控制权限。

      访问控制存在的原因:

       (1)让调用类的其他人,不能随便操作类的某些成员(保证数据的安全);以及避免让调用者掉入“坑”中,比如某些数据没有在类设计中没有初始化不能调用,否则异常。

        (2)类库的设计者可以改变类的内部实现,而不会影响到调用者。

      

     控制方式:访问控制符:public、protected、private以及默认

                         包访问权限


3、复用实现

      一个类被设计完成后,其中的功能可以通过2种方式实现代码的复用。

      (1)组合,就是将这个类当成另一个类的成员属性,通常是private。

             组合是动态发生,就是称为聚合。(关于组合和聚合的区别可以参考网上资料)

      (2)继承。

      非常重要的说明:组合比继承更为灵活,因为我们可以动态的修改被组合的对象,同时可以组合多个,同时设计很清晰。

                                      继承会导致类的设计变得复杂。

                                      所以,优先考虑组合

                                           

                                             UML说明: 实心菱形表示组合关系,一条直线表示关联关系。

                                                                          图1:组合示意图

   

4、 继承

       继承表示了父类和子类的相似性。虽然继承创造了一个新的类型(子类),但是子类和父类是具有相同类型(如狗是动物)。子类是更加详细的父类。

       子类和父类表现差异的方法2种:

       (1)子类添加新方法。

             关系:is-like-a(像一个)。父类是没法调用子类独有方法。

       (2)子类覆盖父类的方法(改变父类行为) 

              关系:is-a(是一个)。可以通过父类引用指向子类对象,调用覆盖的方法。

                                          

                                                 UML说明:用空心三角形表示继承关系

                                                                               图2:继承示意图


5、多态

      伴随多态的可互换对象。

      处理类型的结构层次关系的时候,经常性的希望将一个对象不是作为它本身类型处理,而是当成它的父类进行处理。

      实现的是通过父类引用实现处理不同消息。

      实现方法:A   a = new B();         //这里涉及到向上转型

                          a.method();

                          子类要重写了父类的方法。不同的子类响应的消息不同。


6、单继承

      单继承保证对象的类型是唯一确定的。如铅笔是笔,不会是动物。


7、容器

      (1)不同容器的效率不同,java提供了很多种类型的集合基于不同数据结构类型实现的。

                 说明:LinkedList和ArrayList的区别

                  linkedList是基于链表实现的,ArrayList是基于数组实现的

                  所以:  linkedList查找元素慢,插入和删除元素快;ArrayList相反。

       (2)参数化类型(泛型)

                  容器存放的是Object,从存入对象(任意类型),都会向上转化为Object类型,取出对象,需要程序员自己强制向下转型。

                 这个过程缺陷明显:1)向下转型不安全,极容易报运行时异常(类型转换错误);

                                                     2)向下转型和运行时的检查都需要花费运行代码的大量时间;

                 泛型保证存入对象类型一致,编译器进行检查很好。


8、对象的创建和生命期

      java中对象的创建通过new,在堆(heap)的内存池中动态的创建对象。通过垃圾回收机制自动回收不需要的对象垃圾(不再需要使用的对象)。

      说明:c++所以高效,是将对象创建在堆栈上了。

      面试经常问:java的垃圾回收机制?

      

9、 并发编程

       并发:同一时刻处理多个任务。

       并发的问题:共享资源处理。

       正确的方式:某个任务锁定某项资源,完成任务后,释放资源锁,使其他任务可以使用这项资源。

       面试经常问:进程与线程的区别?


10、OOP

        OOP面向对象编程,说白了就是如何设计类,基于类的编程。

         有人解释:OOP:引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。

AOP:为多个分散的类引入公共行为


    



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值