浅谈面向对象

本文探讨了结构化开发的缺点,如设计直观性差和适应性弱,然后聚焦于面向对象方法,特别是其以类为基本单元,封装、继承和多态为核心,以及类如何通过类定义提供功能。通过自行车组装和主谓宾表达的比喻,阐述了面向对象的直观性和自然性。

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

​ 因为在面试的过程中有聊到面向对象,当时给出的答案可能过于简单,所以面试后找到了相关书籍大致看了一下相关的介绍。

​ 说到面向对象开发方法,那就不得不提起另外一种开发方法,那就是结构化开发方法。早期的C,Basic,Pascal等都是依托该方法进行开发,那么结构化开发有什么缺点呢?

​ 首先结构化开发中最小的程序单元是函数,主张的是自顶向下的设计方式,故其主要原则可以概括成为:自顶向下,逐步求精,模块化等。而一个完整的结构化程序设计流程也自然少不了结构化分析(Structured Analysis,SA)去进行需求的分析,然后使用结构化设计(Structured Design,SD)进行详细的设计,最后采用结构化编程(Structured Program)进行系统的实现。

在这里插入图片描述

​ 通过图应该也很容易地想到结构化开发的缺点,显而易见的肯定就是设计不够直观,开发者首先需要将客观世界模型拆分成一个一个细小的功能。每个功能对应各自的实现处理;另一个缺点自然就是适应性差,假如用户的需求一旦得到改变,那么当开发人员需要进行修改时,都需要再次采用自顶向下的方式修改模块的结构,这样一来的话,成本就会相当之高。

​ 这个时候,面向对象的开发方法便诞生了,Java便是其中一个基于该方法的编程语言。再次回到结构化开发的方法,模块化的方式虽然有迹可循,但是设计不够直观,无法让人一眼就了解到其中的意思。故此面型对象基于类,对象,继承,封装,多态,消息等基本思想,运用人类一贯的自然思维去思考问题,认识问题,还原出了客观世界中事物以及其相互关系的原始面容。

与结构化开发不同,面向对象的最小程序单元是类。

引用某书籍中的类的定义:类定义=成员变量(Field,状态数据) + 方法(Method,行为)

在这里插入图片描述

这个时候就会产生思考了,为什么面向对象的最小程序单元是类,而不是说和结构化开发中的函数或者Field呢?

再次回归到面向对象的思想:运用人类一贯的自然思维去思考问题,认识问题,还原出了客观世界中事物以及其相互关系的原始面容举个例子:假如我们需要组装一辆自行车,如果拿到手的是轮子,座椅,轮子等大颗粒的组件是不是相较于拿到手的是螺丝,铁条等小颗粒的组件更为容易呢?

再比如,运用结构化开发,我们可能对小明吃西瓜应该以如下语句来表达:

吃(小明,西瓜);

但是如果是面向对象开发,我们的表达则为:

小明.吃(西瓜);

可以想到,这个表达和我们日常生活中主谓宾的表达方式如出一辙,所以面向对象更为地接近自然,能够让人更容易理解。

说了这么多,那就应该聊聊面向对象方法地三个重要特征了:封装,继承和多态三大特征缺一不可。

封装 从类的定义中可以看出,指的就是将对象的细节隐藏,然后通过一些公用方法来暴露该对象的功能。

继承 软件复用的一种重要手段,当子类继承父类后,子类作为一种特殊的父类,将直接获得父类的全部属性和方法。

多态 子类对象可以直接给父类变量,并且依然表现出子类的行为特征。也就是说,同一个类型的对象在执行同一个方法时,可能表现出多种行为特征。

总结:

1. 对象是面向对象的最基本概念,基本特点:标识唯一性,分类性,多态性,封装性,模块独立性好。
2. 类是具有共同属性,方法的一类事物。类是对象的抽象,对象是类的实例。类是整个软件系统最小的程序单元,类通过封装暴露对外提供的功能,提高了类的内聚性,降低了对象之间的耦合性。
3. 对象之间的相互合作需要一个机制协助进行,这样的机制就称之为"消息"。消息是一个实例与另外一个实例之间相互通信的机制。
4. 在面向对象方法中,类之间共享属性和操作称为继承。继承具有传递性,可以分为单继承和多继承。
值得一提的是,由于考虑到会引起继承结构的混乱,降低程序的可理解性,Java不支持多继承。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值