面向对象的核心

(1).封装

  封装的类=数据+对此数据所进行的操作(即算法)

  封装起外界不必需要知道的东西,指向外界展现可供展示的东西。

  小到一个简单的数据结构,大到一个完整的软件子系统。静态的如某软件系统要收集数据信息项,动态的如某个工作处理流程,都可以封装到一个类中。

  具备这种意识,是掌握面向对象分析与设计技巧的关键。

(2).抽象

  在使用面向对象的方法设计一个软件系统时,首先就要区分出现实世界中的事务所属的类型,分析它们拥有哪些性质与功能,再将他们抽象为在计算机虚拟世界中才有意义的实体——类。在程序运行时,由类才创建出对象,用对象之间的相互合作关系来模拟真实世界中事务的相互关联。

  在从真实世界到计算机虚拟世界的转换过程中,抽象起了关键的作用。

(3).继承

  真实世界中,食物之间有着一种派生关系,比如“食物”这一大类包括“水果”这一子类,而“苹果”又包含在“水果”这一子类中

        

  在计算机世界中,以面向对象的观点不仅将上述食物抽象为类,而且将事物之间的派生关系也一并模拟出来,这种关系成为"继承"

  在面向对象软件软件系统中,继承除了模拟现实世界中事物关系这一作用,还有一个“重用已有代码而又不破坏已有代码”的方法。

  举例说明:

  现在要开发一个 B 项目,架构设计师发现以前完成的 A 项目中有部分类完全可以在 B项目中重用,但需要增强这些类的功能以便适用于 B 项目。如果从 A 项目中直接抽取这些类的源代码并加以修改,虽然可以满足 B 项目的需要,但现在却需要维护两套功能类似的类代码,加大了管理的成本。在这种情况下,选择从 A 项目的类中用继承的方法派生出新类用在 B 项目中是一个可选的方案,既满足了新项目的需要,又避免了大量的重复代码与双倍的代码维护成本。

(4).多态

  用一个比较抽象的事物来取代具体的表达方式,再面向对象软件中用“多态”这一特性来模拟。

  再编程时应用多态的方法,可以用一句话表示:

  用抽象的类编程:我们将“接口”也看成一种特殊的抽象类,抽象类中可以有非抽象方法,而接口中所有方法都是抽象方法。

  即在代码中本应使用某一具体子类的地方使用较为抽象的基类对象,这种方法所带来的好处是多态的代码具有"变色龙"的特性,即在不同的条件下,同样代码可以完成不同的功能。

  适当地在开发中应用多态特性,可以开发出可扩充性很强的系统。

  面向对象的四大特性不是彼此独立的,“抽象”和“封装”更多地体现为一种思维方式,主要体现在面向对象系统的总体分析和设计中,“继承”和“多态”则多应用与具体子系统和软件模块的设计与编码过程中,而且“继承”是“多态”的基础。

C#编程语言与面向对象——核心的更多相关文章

  1. C#编程语言与面向对象——抽象基类与接口

    在一个类前加“abstract”关键字,此类就成为抽象类. 对应的,在一个方法前加“abstract”关键字,此方法就成为抽象方法. abstract class Fruit //抽象类 { publ ...

  2. C#编程语言与面向对象——继承

    现实生活中的事物都归属于一定的类别,比如,狮子是一种(IS_A)动物,为了在计算机中模拟这种关系,面向对象的语言引入了继承(inherit)特性. 构成继承关系的两个类中,Animal称为父类(par ...

  3. C#编程语言与面向对象——类与对象

    由于ASP.NET技术是全面向对象的,因此,要掌握这一技术,必须具备有扎实的面向对象理论基础 使用C#编程,所有的程序代码几乎都放在类中,不存在独立于类中之外的函数,因此,类是面向对象编程的基本单元 ...

  4. 全新通用编程语言 Def 招募核心贡献者、文档作者、布道师 deflang.org

    先给出官网地址:deflang.org 一句话简介:可扩展编程语言 Def 的目标是将 C++ 的高效抽象和 Lisp 的强大表现力融为一体. 你可以通过阅读 入门教程 .源码 或 测试用例 来简要或 ...

  5. Java面向对象核心技能

    1.封装 封装是面向对象的三大特性之一,就是将类的状态信息隐藏在类内部,不允许外部程序直接访问,而通过该类提供的方法来实现对隐藏信息的操作和访问. 封装的好处:隐藏类的实现细节:让使用者只能通过程序规 ...

  6. C#编程语言与面向对象——委托

    委托(delegate)也可以看成是一种数据类型,可以用于定义变量,但它是一种特殊的数据类型,所定义的变量能接收的数值只能是个函数,更确切地说,委托类型的变量可以接收一个函数的地址. 简单地说 委托变 ...

  7. C#编程语言与面向对象—— 多态

    多态编程的基本原理是: 使用基类或接口变量编程. 在多态编程中,基类一般都是抽象类,其中拥有一个或多个抽象方法,各个子类可以根据需要重写这些方法.或者使用接口,每个接口都规定了一个或多个抽象方法,实现 ...

  8. C#面向对象设计模式纵横谈——1.面向对象设计模式与原则

    一:设计模式简介 每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心. ---- Christopher Alexander 软件设计领域设计模式: 设计模式描述了软件设计过 ...

  9. Java面向对象编程 第一章 面向对象开发方法概述

    一.软件开发经历的生命周期: ①软件分析 ②软件设计 ③软件编码 ④ 软件测试 ⑤ 软件部署 ⑥软件维护 二.为了提高软件开发效率,降低软件开发成本,一个优良的软件系统应该具备以下特点: ① 可重用性 ...

随机推荐

  1. Django ModelForm and Form

    django表单系统中,所有的表单类都作为django.forms.Form的子类创建,包括ModelForm 关于django的表单系统,主要分两种 基于django.forms.Form 基于dj ...

  2. Java开发中经典的小实例-(打印九九乘法表)

    public class Test16 {    public static void main(String[] args) {        // TODO Auto-generated meth ...

  3. 【树莓派】基于TinyProxy搭建HTTP代理服务器

    一.前言 关于为什么要玩玩HTTP代理就不用我多说了.  二.搭建环境 * Linux laptop 2.6.32-45-generic #100-Ubuntu SMP Wed Nov 14 10:4 ...

  4. js判断鼠标进入以及离开容器的方向

      (注:以下代码涉及到jQuery,建议前端大牛绕路~~~) 1.遇到的问题      如图当鼠标右箭头位置上下移动的时候  下面的城市列表容器不能隐藏. 2.方法: 网上搜了些前端大牛们的解决办法 ...

  5. python的异常小结与assert

    异常的处理 一. 二. -----------------2016-4-20 18:04:06--

  6. Hibernate 中出现 XXXX is not mapped 问题

    1.查询的不是数据库名是实体名…Entity 2.也许是你where条件后的字段名称写错了

  7. Element is not currently visible and so may not be interacted with错误

    用selenium定位时,碰到这种错误的原因: 此种问题的关键是在于用className和id都不唯一所以找不到对象 所以,碰到这种问题就换一种定位方式

  8. 超越线程池:Java并发并没有你想的那么糟糕

    转载: 超越线程池:Java并发并没有你想的那么糟糕

  9. 如何有效使用Project(2)——进度计划的执行与监控

    继上次的的<编制进度计划.保存基准>继续讲解如何对计划进行执行和监控. 计划执行即:反馈实际进度.反馈工作消耗(本文只考虑工时,不考虑成本).提出计划变更请求.如果你的企业实施了专门的PM ...

  10. WinForm程序打包说明

    如果使用的是VS2013需要下载并安装 Microsoft Visual Studio 2013 Installer Projects 下载地址:https://visualstudiogallery ...