288月 2018

0

1026

经常提示我找不到对象,这就是我改行硬件设计的真实原因

老wu高考那会儿,全世界都在鼓吹21世纪将是信息技术的时代,也即是所谓的IT,当时互联网正在疯狂的增长,大洋彼岸的硅谷在不断上演商业奇迹,很是令老wu向往。再加上当时电影《黑客帝国》在国内的火爆上演,屏幕上不断下落的代码片段特效实在太酷了。好!我也要当程序员,一来可以在女同学面前炫技,二来毕业后出来找工作肯定不用愁,21世纪将是信息技术的时代嘛,肯定是需要程序员来实现的,混的差至少是个金领,运气好一点成为下一个比尔盖茨也说不定。最最最为重要的是,听说学编程还可以面向对象编程,美美哒!!!

可到了学校一报到发现却不是那么回事,班上三十几人,女生四人,你说如何面向对象编程?所以老wu后来的面向对象编程是这样的,😢

好吧,其实是老wu一开始搞错了,面向多想编程不是老wu想的那样,也不知国内哪个二货翻译给起的中文名词“面向对象编程”实在是太容易让人误解了,面向对象编程,英文名是“Object-oriented programming,缩写:OOP” 是一种具有对象概念的程序编程规范,同时也是一种程序开发的抽象方法。它可能包含数据、属性、代码与方法。对象则指的是类的实例。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性,对象里的程序可以访问及经常修改对象相关连的数据。在面向对象程序编程里,计算机程序会被设计成彼此相关的对象。

面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度。

面向对象的程序设计把计算机程序视为一组对象的集合,而每个对象都可以接收其他对象发过来的消息,并处理这些消息,计算机程序的执行就是一系列消息在各个对象之间传递。

现在,随着OOP的深入,当我们提到面向对象的时候,它不仅指一种程序设计方法。它更多意义上是一种程序开发方式,一种逻辑思维。在这一方面,我们必须了解更多关于面向对象系统分析和面向对象设计(Object Oriented Design,简称OOD)方面的知识。许多流行的编程语言是面向对象的,它们的风格就是会透由对象来创出实例。

目前流行的面向对象编程语言包含C++、Objective-C、Java、Smalltalk、Delphi、Swift、C#、Perl、Ruby 、 PHP 、Common Lisp、Python等。

什么是类?什么是对象?

支持面向对象编程语言通常利用继承其他类达到代码重用和可扩展性的特性。而类有两个主要的概念:

• 类(Class):定义了一件事物的抽象特点。类的定义包含了数据的形式以及对数据的操作。
• 对象:是类的实例。

其中类(Class)定义了一件事物的抽象特点。类的定义包含了数据的形式以及对数据的操作。举例来说,“狗”这个类会包含狗的一切基础特征,即所有“狗”都共有的特征或行为,例如它的孕育、毛皮颜色和吠叫的能力。类可以为程序提供模版和结构。一个类的方法和属性被称为“成员”。

面向对象的语言遵循的编程模式不同于结构化编程语言,比如 C 和 COBOL。结构化编程范例是高度面向数据的:您拥有数据结构,然后程序指令处理该数据。面向对象的语言(比如 Java 语言)将数据和程序指令组合到对象中。

对象(Object)是类的实例。对象有时会对应到现实世界中的事物,举例来说,一个图形程序可能有圆形、矩形与画面等对象,一个线上购物系统可能有购物车、顾客与产品等类。每个对象就是一个特定类的实例(例如,名称是“玛丽”的对象可能是类雇员的一个实例)。程序在面向对象编程当中被视为方法,变量被视为成员或属性。例如,“狗”这个类列举狗的特点,从而使这个类定义了世界上所有的狗。而莱丝这个对象则是一条具体的狗,它的属性也是具体的。狗有皮毛颜色,而莱丝的皮毛颜色是棕白色的。因此,莱丝就是狗这个类的一个实例。一个具体对象属性的值被称作它的“状态”。(系统给对象分配内存空间,而不会给类分配内存空间。这很好理解,类是抽象的,系统不可能给抽象的东西分配空间,而对象则是具体的。)

对象摘要

一个精心编写的对象:
• 拥有明确定义的边界
• 执行一组有限的活动
• 仅知道它的数据和它完成活动所需的任何其他对象

在本质上,对象是一个离散的实体,它仅包含执行其任务而必要的对其他对象的依赖关系。

OOP 的原则

如果您有结构化编程的背景,您可能还不清楚 OOP 的价值优势。毕竟,一个人的属性和检索(并转换)这些值的任何逻辑都可使用 C 或 COBOL 编写。如果理解了它的定义原则,OOP 范例的优势就会更加明显:封装、继承 和多态性。

封装

回想一下,一个对象是离散的或独立的。此特征是封装的工作原理。隐藏 是另一个有时用于表达对象的独立、受保护性质的术语。

无论使用哪个术语,重要的是对象在它的状态和行为与外部世界之间保持一条界线。像真实世界中的物体一样,计算机编程中使用的对象与使用它们的应用程序中的不同对象类别拥有各种各样的关系。

在 Java 平台上,可以使用访问修饰符(后面将会介绍)来区分 公共 与 私有 对象关系的性质。公共访问是完全开放的,而私有访问意味着对象的属性仅可在对象自身内访问。

公共/私有边界采取面向对象的封装原则。在 Java 平台上,可以逐个对象地改变该边界的强度。封装是 Java 语言的一个强大特性。

继承

在结构化编程中,常常会复制一个结构,为它提供一个新名称,然后添加或修改属性,使新实体(比如一个 Account 记录)不同于它的原始来源。随着时间的推移,此方法会生成大量重复代码,这可能带来维护问题。

OOP 引入了 继承 的概念,使得特殊化的类 — 无需额外的代码 — 可以 “复制” 它们要特殊化的来源类的属性和行为。如果其中一些属性或行为需要更改,您可覆盖它们。您更改的唯一的源代码是创建特殊化的类所需的代码。来源对象称为父对象,新的特殊化对象称为子对象。

假设您在编写一个人力资源应用程序并想使用 Person 类作为一个名为 Employee 的新类的基础(也称为超类)。作为Person 的子类,Employee 将拥有 Person 类的所有属性,以及更多属性,比如:

• 纳税人识别编号
• 员工编号
• 工资

继承使得创建新 Employee 类很容易,不需要手动复制所有 Person 代码。

多态性

多态性是一种比封装和继承更难掌握的概念。在本质上,多态性表示属于一个分层结构的同一个分支的对象,在发送相同的消息时(也即在被告知执行同一件事时),可通过不同方式表现出该行为。

要了解多态性如何应用到业务应用程序上下文,可返回查看 Person 示例。还记得告诉 Person 将它的属性格式化到一个 String 中吗?多态性使 Person 可以依据它的 Person 类型,以各种不同的方式表示它的属性。

好吧,看到这里,你是不是已经被各种名词概念给弄糊涂了,如果你打算深入了解面向对象编程的思想,老wu推荐一本入门的书《深入浅出面向对象分析与设计》

《深入浅出面向对象分析与设计》,东南大学出版社出版,外文书名:Head First Object-Oriented Analysis&Design,作者:(美)麦克劳克林(Mclaughlin,B.D) 等著;OReilly Taiwan公司 编译。《深入浅出面向对象分析与设计》将告诉你如何分析、设计以及撰写真正面向对象的软件:容易重用、好维护、可扩展的软件;不再使你心碎的软件;让你增添新功能而不会破坏旧机制的软件。在本书中,你将学到:使用诸如封装(encapsulation)与委派(delegation)之类的OO原则建立灵活的应用程序;使用开闭原则(Open-Closed Principle)与单一职责原则(Single-Responsibilitv Principle)提升程序的重用性;学习如何将OO原则、设计模式及各种开发方法通通整合到OOA&D项目的生命周期里;运用UML、用例及用例图来确保所有利害关系人都能清楚地进行沟通,协助你交付正确的软件,达到每个人的要求。

如何下载 《深入浅出面向对象分析与设计》高清PDF电子书

关注吴川斌的博客公众号

在公众号里给老吴发消息:

下载|深入浅出面向对象分析与设计

建议复制粘贴过去不会码错字哟,O(∩_∩)O~

老wu便会将 深入浅出面向对象分析与设计 PDF 的下载链接发给您啦,O(∩_∩)O~

的确,老wu认为面向对象分析与设计方法是解决大型软件项目开发难题的灵丹妙药。不过面向对象编程也有一个令老wu恼火的地方,因为程序编译或运行过程中老是会报这个错误“找不到对象”!!!找不到对象?天天报“找不到对象”搞得我差点真的就找不到对象了 😢。

所以我后来改行硬件设计了,再说,每天被人喊软男多不爽,还是硬男这个称呼感觉爽些!✌️ 再说了,面向对象拉线也是极好的,🙃

微信扫描二维码
为老wu 打个赏
pay_weixin
金额随意 快来“打”我呀 老wu要买六味地黄丸补补~~

原创文章,转载请注明: 转载自 吴川斌的博客 http://www.mr-wu.cn/

本文链接地址: 经常提示我找不到对象,这就是我改行硬件设计的真实原因 http://www.mr-wu.cn/head-first-object-oriented-analysis-and-design/