JAVA学习:面向对象编程
“算法+数据结构=程序”是一句经典名言,这句话很直接的说明了程序的本质:处理数据、产生结果。即便是最简单的HelloWorld程序,我们也可以将字符串“HelloWorld”视作数据,将输出操作视作算法。
但是在实际编程的时候,如何安置程序中的算法和数据就成了一个大问题。随着程序规模的增长,程序需要处理的数据可能会越来越多,需要用到的算法也会越来越多,以贪吃蛇为例,如果简单的将游戏需要的数据堆在程序的头部,就会变成下面的样子,各种互不相干的数据堆在一起:

用于实现游戏的各个函数,也即算法,更是会多达几百行。一个贪吃蛇就已经如此“复杂”了,更遑论规模更大的程序。
而这样多的数据与算法,就带来三个很直接的问题:
1.修改、调试程序时难以迅速找到想修改的数据或函数
2.数据可以被任意函数修改,从而可能被意料之外的算法处理,导致调试困难
3.程序规模如果进一步扩大,给变量、函数进行命名时会越来越容易冲突,最后导致标识符越来越长。
利用C语言进行编程时,如果要解决这样的问题,做法就是将部分数据和处理该部分数据的算法(函数)都放进单独源文件中去,然后在一个头文件中声明这些函数,再在主程序中通过包含该头文件以使用这些算法与数据。
以一个C语言实现的推箱子编辑器为例,有关游戏内部资源的存储、处理都放进了一个单独的源文件中:
#include "PushBoxEditor.h" //其他代码 //关卡信息存储区 ; ][]; //当前关卡状态 ; ][]; //资源存储 HBITMAP _hBitMap[]; //其他代码
这样一来,主程序中就只要引入头文件“PushBoxEditor.h”,然后直接使用对应的函数即可:
//加载关卡数据 int loadResult = LoadMapData(hWnd); if (loadResult == LM_FAIL_RESOURCE) ;
这样的做法就是面向对象的雏形:将数据和相关的算法放在一起。
但是C语言的这类做法还是有些不足,首先就是上面所说的第三个问题:命名冲突,并不能解决。比如实现一个3D游戏,对于3D模型数据,有一个函数叫Load,它们单独放在一个文件,而对于图像数据,也有一个函数叫Load,它们也单独放在一个文件,但是主程序对于这两个文件中的Load都要使用,该怎么办?如果程序规模小,一个人干,那无所谓,自己知道有这个冲突,把他们分别改成LoadModel和LoadImage就好了。但是这个做法在程序规模变大,有多人共同开发时就不行了,自己编写一个模块,还得先问清楚所有人,是否有用过某个名字,这太麻烦。
其次是另一个更重要的问题:如果结构完全相同的数据,我需要不止一份该怎么办?假设我们将一个很复杂的结构体A和处理它的相关算法都单独放在了一个源文件,如果我们只持有一个A的实例,那无所谓,可是如果这个A我们需要很多份实例呢?比如字符串和处理字符串的各类函数,我们是可以将一个字符串和相关的函数单独放置,然后调用相应函数处理这个字符串,可是我们要同时持有多个字符串该怎么办呢?
当然,即便是面向过程的语言,解决这类问题的方法也是一定有的,只不过解决起来可能很麻烦,比如数据在主程序中持有,相关的算法单独放置。但是面向对象编程可以更方便的解决这类问题。
面向对象编程时有两个关键的概念:类与对象(也有一些语言称为对象与实例)。其中对象就是用于解决“不相关数据混在在一起”的问题,通过将相关的数据集合在一个对象内部,然后利用对象支持的方法去处理对象内部的数据,从而实现数据间的“独立”。而类作为制造对象的模板,恰好可以解决最后提出的问题:结构完全相同的数据,我需要不止一份。通过类去制造一个又一个对象,就可以获得一份又一份结构相同、互相独立的数据。
写到这儿感觉没什么好写的……不想写了,就这样吧ε=ε=ε=ε=ε=ε=┌(; ̄◇ ̄)┘
JAVA学习:面向对象编程的更多相关文章
- JAVA的面向对象编程
JAVA的面向对象编程 面向对象主要针对面向过程. 面向过程的基本单元是函数. 什么是对象:EVERYTHING IS OBJECT(万物皆对象) 全部的事物都有两个方面: 有什么(属性):用来描写叙 ...
- 使用Java实现面向对象编程
使用Java实现面向对象编程 源码展示: package cdjj.s2t075.com; import java.util.Scanner; public class Door { /* * Doo ...
- Java学习——网络编程
Java学习——网络编程 摘要:本文主要介绍了什么是网络编程,以及如何使用Java语言进行网络编程. 部分内容来自以下博客: https://www.cnblogs.com/renyuan/p/269 ...
- JAVA的面向对象编程--------课堂笔记
面向对象主要针对面向过程. 面向过程的基本单元是函数. 什么是对象:EVERYTHING IS OBJECT(万物皆对象) 所有的事物都有两个方面: 有什么(属性):用来描述对象. 能够做什么 ...
- 学习面向对象编程OOP 第二天
好,今天继续学习这个面向对象编程.(根据博客园 小炒花生米写的博客学习而来) 一,封装性 a.把对象的全部属性和全部服务(方法)结合在一起,形成一个不可分割的独立单元 =>对象 b.信息隐蔽,尽 ...
- java学习面向对象之异常之一
一.异常的概述: 什么是异常?在我们编写java程序的时候,会出现一些问题,比如内存溢出啊或者数组索引超出最大索引啊,这些编程当中出现的这些个问题就是异常.但是异常也分为可以处理的和不可以处理的.比如 ...
- 学习面向对象编程OOP 第一天
面向对象编程 Object Oriented Programming 一.什么是面向对象编程OOP 1.计算机编程架构; 2.计算机程序是由一个能够起到子程序作用的单元或者对象组合而成.也就是说由多个 ...
- Java基础--面向对象编程1(类与对象)
1.类(class)的定义 类是对一组具有相同特征和行为的对象的抽象描述. 在程序中,引入类的概念,就是为了快速生成更多的具有相同特性和行为的事物. 2.对象(object)的定义 对象是类的具体实现 ...
- Java学习---面向对象的远程方法调用[RMI]
基础知识 分布式计算是一门计算机科学,它研究如何把一个需要非常巨大的计算能力才能解决的问题分成许多小的部分,然后把这些部分分配给许多计算机进行处理,最后把这些计算结果综合起来得到最终的结果. 常见的分 ...
- python 学习 面向对象编程
面向对象编程---oop,是一种编程思想,oop把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行为了简化程序设计 ...
随机推荐
- soj3129: windy和水星 -- 水星数学家 2
注意int的范围:-2147483648-2147483647 如果输入会出现溢出,这题应该就是卡的这里.其使用long long就不用考虑这个. 加深:如果输入的数是很多位,直接当做字符串处理即可. ...
- linux命令学习汇总
1. touch 命令 touch -简单来说touch 命令可以用来建立文件 文件不存在的情况下,也可以更改创建时间等等 2. pwd 查看目录---一般看目录用pwd 即可但是pwd -P 会不以 ...
- Wordpress上传资源报HTTP错误
简述 在公司内部搭建内部视频学习网站,经过对比选择了wordpress进行站点搭建.但是在上传视频遭遇到了各种问题,特将此处理过程进行记录. 原因排查 1.上传一个十几兆mp4的文件上传进度到达百分之 ...
- 经典卷积神经网络(LeNet、AlexNet、VGG、GoogleNet、ResNet)的实现(MXNet版本)
卷积神经网络(Convolutional Neural Network, CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现. 其中 文章 详解卷 ...
- java发送邮件时遇到的坑
之前用163邮箱发邮件时明明是成功的,但是使用中国移动自己的邮箱时,无论如何在linux服务器中都发送不成功,一开始报如下错误: javax.mail.MessagingException: Unkn ...
- TOE(TCP/IP Offload Engine)网卡与一般网卡的区别
TCP减压引擎,第一次听说这个名词,但是并不是一个新的概念了,若干年前听说过设备厂商在研究在FPGA之中实现TCP Stack,但是后来没有听到任何的产品出来,应该是路由设备to host的traff ...
- R语言︱函数使用技巧(循环、if族/for、switch、repeat、ifelse、stopifnot)
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 后续加更内容: 应用一:if族有哪些成员呢?- ...
- Caused by: The Result type [json] which is defined in the Result annotation on the class
1.错误描述 严重: Dispatcher initialization failed Unable to load configuration. - [unknown location] at co ...
- 微信小程序之上传下载交互api
wx.request(OBJECT) OBJECT参数说明: 参数名 类型 必填 说明 url String 是 开发者服务器接口地址 data Object.String 否 请求的参数 heade ...
- hihocoder Challenge 29 B.快速乘法
这题的题解和我写的有一拼,异常简洁,爆炸. 这题思路dp 表示的是讨论到第位,并比原数的前n位多了 显然j只能取0,1,毕竟2进制嘛 之后转移就好了,注意下面两个重要状态 #include <c ...