宿迁腾云网络网站建设公司

腾云网络 八年经验专注网站建设
  • 首页
  • 服务项目
    • 网站建设
    • 微信小程序
    • APP开发
    • SEO优化
  • 建站费用
  • 成功案例
    • 网站建设案例
    • 小程序案例
    • APP开发案例
    • SEO优化案例
  • 行业动态
    • 网站建设
    • SEO优化
    • 技术日志
  • 联系我们
    • 关于我们
首页 > 行业动态 > 技术日志 > 刚接触JAVA或者其他面向对象的思维以及类与对象

刚接触JAVA或者其他面向对象的思维以及类与对象

2021-06-08

对于刚接触JAVA或其他面向对象编程语言的朋友来说,一开始可能很难理解面向对象的概念以及类与对象的关系。笔者曾经参加过一次短期培训班,讲授java基础知识。在课程结束时,许多学生没有理解面向对象的思想以及类和对象的含义。这几天有空,想整理一下思路,谈谈我对面向对象和类和对象的理解。

面向对象

首先百度会得到如下定义:

一切都是对象。通过面向对象的方法,将现实世界中的事物抽象为对象,将现实世界中的关系抽象为类并继承,帮助人们实现对现实世界的抽象化和数字化建模。

我们知道编写程序的目的是解决现实生活中的问题,编程中的思维方式也应该接近现实生活中的思维方式。面向对象编程就是为了达到以上两个目的。它使编程工作更加直观和易于理解。需要注意的是,这里提到的编程不仅包括设计过程,还包括面向对象

为什么说面向对象更接近现实生活?

想象一下,当我们向别人描述某事时,我们都会说什么? “它的嘴像鸭子”,“它有四个退缩”,“它的爪子上有网”,“它是哺乳动物,但它是卵生的。”

HAS A 和 IS A 的这种表达方式往往可以简单有效地描述同一事物。 HAS A描述事物的属性或行为,IS A描述事物的类别。

当我们结合这一系列属性时,我们得到鸭嘴兽的类别。同时,哺乳动物这个词简洁明了地表达了所有哺乳动物的特征,而不是一一列举。这是继承特性的体现。同时,卵子发育是多态性的一种表现。

这是面向对象思维的特点,它提取(抽象)有用的属性和行为(丢弃那些不需要关系的)并组织(封装)成一个类。在这个过程中,你可能会发现很多属性或者方法和另一个类是一样的,那么你可以使用继承来避免重复(当然这个过程也可能是你设计了每个类之后,发现它们有共同点,然后提取基类)。更重要的是,继承不能照原样复制。我们可以通过重载来实现相同行为或属性的唯一实现。此功能称为多态性。比如同样的生产行为,实现方式从胎生变为卵生。请大声朗读并牢记面向对象的四个特点:

抽象、封装、继承、多态,与早期结构化编程相比

早期结构化编程是面向过程的(功能)。换句话说,程序由一组函数组成数据结构用面向对象方法与c++描述,调用者作为函数的参数传入。在面向对象的程序中,对象是主体,程序由对象的集合组成。一个对象包含一系列符合设计的函数,供其他对象调用。所以它可能很抽象,

比如我们在设计五子棋游戏的时候,流程化的设计思路就是先分析问题:1、开始游戏,2、黑子先走,3、画图,4、判断输赢,5、转白子,6、画屏,7、判断胜负,8、返回第2步,9、输出最终结果。用单独的函数分别执行以上步骤,问题就解决了。

面向对象的设计是从另一种思维方式解决问题。整个五子棋可以分为:1、黑白,两方的行为完全一样,2、棋盘系统,负责画屏,3、rule系统,负责判断犯规,获胜或输等。第一类对象(玩家对象)负责接受用户输入并通知第二类对象(棋盘对象)棋子布局的变化。棋盘对象负责在接收到棋子的变化后在屏幕上显示变化,同时使用前三种对象(规则系统)来确定对局。 (以上例子来自国内某知名问答社区)

刚接触JAVA或者其他面向对象的思维以及类与对象(图1)

随便写点代码,看看就行,别太认真...

/** 玩家类 **/ public class Player { String name; //棋手名称 boolean isFirst; //是否先手 int color_flag; //代表颜色 0-白 1-黑 Table table;//棋盘对象 public Player(String name,boolean isFirst;int color_flag){ this.name=name; this.isFirst=isFirst; this.color_flag=color_flag; } /** 下棋,x,y为落子坐标 **/ public void play(int x,int y) throws Exception{ if(this.table==null){ throw new IllegalArgumentException("玩家还未注册到棋盘!"); } table.setNewPieces(x,y); } public void setTable(Table table){ this.table=table; } } /** 棋盘类 **/ public class Table{ List playerList=new ArrayList(); Referee referee ; public Table(){ referee =new Referee(this); } /** 注册玩家 **/ public void registPlayer(Player player) throws Exception { //检测棋盘中的玩家是否已满,先手玩家和玩家选色是否冲突。 ....... playerList.add(player); player.setTable(this); } /** 落子 **/ public void setNewPieces(int x , int y){ //重新绘制棋盘 ...... //调用裁判对象,判断结果 if(referee.isEnd){ End(); } } public void End(){ ....... } } /** 裁判类 **/ public class Referee(){ Table table; public Referee(Table table){ this.table=table; } public boolen isEnd(){ //判断输赢 .... return false; } }

但是,其实通过上面的例子代码,不难发现,即使我们使用面向对象的方式,也已经实现了上面例子中提到的几个象棋过程,只不过过程是封装的进入类的方法。所以其实面向对象和面向过程不是编程的区别(需要实现的业务逻辑量不会变),而是设计的区别!

类和对象

类是抽象的,而对象是具体的

如何理解上面的单词?例如,鸭嘴兽是一种类型,特定的鸭嘴兽 A 和鸭嘴兽 B 是对象。在 JAVA 中,对象是通过 new 关键字声明的。再比如,《红色警戒》中的美军士兵是一种单位,点击后从军营中射出的那个就是目标:

类的定义是一个模板,它描述了一类对象的属性和行为。类通常是抽象的,没有实体。哺乳动物是属的概念,是抽象的。实际上,没有哺乳动物这样的实体。只有具体的东西,比如老虎和狮子。在编程工作中应用这种思维方式,我们将程序中的实例抽象为类。例如,如果一个系统中的用户有三、李四,我们将它们抽象为类,或者称它们为命名数据类型。

对象是基于它们所属的类模板创建的真实事物。在程序中,我把这个有形的东西称为实例。我们给它的属性赋予特定的值,让它成为张三或李斯。在内存中,对象代表特定的数据。

我上面说的都是概念性的东西,下面说说实际应用过程中的理解。

在数据类型方面

以java为例,数据类型分为基本数据类型和引用数据类型。

基本数据类型为byte,,,int,long,,char,;其他需要使用new关键字赋值的都是引用数据类型。类和对象指的是被引用数据的类型和值(这里指的类不仅包括接口、数组、枚举和注解)。引用是指对内存地址的引用,后面讲内存的时候会详细讨论这个。看下面的代码:

int a =1; Person b=new Person();

a 和 b 都是无意义的变量名。需要注意的是:a的类型是基本数据类型int 为1,b的类型是引用类型,指的是对象new()。我们常说对象xx,比如这里的对象b。但实际上b只是一个对象的引用,真正的对象是new()!

刚接触JAVA或者其他面向对象的思维以及类与对象(图2)

需要注意的是,它也是一种引用数据类型,但是因为使用率非常高,所以可以像JVM的基本数据类型一样使用:a = "abc";等同于 a = new ("abc") ;

简而言之,简单来说,类是指引用数据的类型,对象是具体的赋值。为了更深入的理解,我们需要在下面解释这个引用是如何反映的。

什么是引用(来自记忆)

要深入理解什么是类,什么是对象,什么是引用,都离不开Java的内存使用。

在Java中,内存大致分为栈()和堆(heap)(之所以粗略是因为它还包括其他几个部分,这里就不赘述了)。我不会在这里详细说明什么是堆栈和堆。有时间我会整理一篇文章详细讲解。

这里只讲一点:在Java中,基本的数据类型和对象引用是存放在栈()中,而对象是存放在堆(heap)中的,比如下面的代码:

int a=1; Person p;

内存中的状态大致如下:

int a = 1 直接在栈中开辟空间,没有实例化的p的值为null,因为没有有效的内存地址来引用它。而当代码修改如下:

int a =1 ; Person p = new Person();

内存中的状态大致如下:

p=new();使p的值=即对象的地址new();在堆中。所以不难理解前面提到的对象的引用,所谓引用其实就是对堆内存地址的引用。总结

随着计算机技术的不断进步,现在计算机不仅仅是用来解决计算问题,而是用来解决越来越接近现实生活的复杂问题。面向对象正是这一发展过程的产物,它使编程工作更贴近人们的思维方式,从而大大提高了编程效率。我们必须明白的是,面向对象不是一种编程方式,而是一种编程思维方式,包括分析、设计、编码等。在面向对象编程中数据结构用面向对象方法与c++描述,程序的基本单元是对象,数据被封装在对象中。类是一个对象模板,它是一个预定义的结构。所谓类的实例化,就是将数据填充到模板中。

最后,我的文笔不是很好,需要改进。写文章和博客的最大目的是梳理自己的想法,其次是分享自己的想法。希望大家多多投诉,共同进步。

Tag: 面向对象分析与设计 面向对象方法
网站制作公众号

宿迁腾云网络网站建设公司 | 网站开发 | 网站制作 | 网站优化

咨询电话:13160355545

上一篇

返回栏目

下一篇

免责声明:本站所有文章和图片均来自用户分享和网络收集,文章和图片版权归原作者及原出处所有,仅供学习与参考,请勿用于商业用途,如果损害了您的权利,请联系网站客服处理。

热推

  • PHP开源软件开发人员编写单元测试时的常犯错误
  • 9本免费的Perl语言编程书籍推荐(一)
  • 谁说WebSocket只能和阿帕奇搭配腾云网络带你看看WebSocket与Nginx的小秘密
  • 江阴问鼎教育分享课程:澄江中路5号东都大厦8楼PLC编程应注意以下基本原则
  • php 网站源码 论坛修改版流行PHP语言论坛程序官方网站取走网站完整数据库(图)论坛源码 php手机版
  • php域名重定向代码利用301永久重定向来高速搜索引擎,我的网站内容搬家了php代码里隐藏域名
  • 2017年编程语言排行榜top20获奖名单:LOGO语言本月排在
  • php 开源轻博客系统康盛创想正式开放源代码下载产品开源事业力度(组图) 开源php erp系统
  • 这篇文章主要介绍中设置php代码错误提示的方法
  • php开发从入门到精通计算机专业未来的就业方向,学什么,怎么学呢?刘建清开关电源维修从入门到精通^^^开关电源维修从入门到精通

相关

php扩展计算机编程的世界里翻一翻的50种“,!”程序安装p

【关键字】计算机程序设计语言的发展史及现状(组图)

【关键字】计算机程序设计语言的发展史及现状(组图)

初学C#,什么是面向对象?为什么要使用面向对象编程?(一)

初学C#,什么是面向对象?为什么要使用面向对象编程?(一)


,,继承的特性子类Go-?Go

,,继承的特性子类Go-?Go

如何修复被黑客篡改的网站代码与数据库?入侵迹象与范围评估指南

如何修复被黑客篡改的网站代码与数据库?入侵迹象与范围评估指南

了解常见PHP应用程序安全威胁,掌握6个常见安全性攻击

了解常见PHP应用程序安全威胁,掌握6个常见安全性攻击

微信支付SDK漏洞曝光!谁会用到它?商家必看

大会现场蒋涛调查参会者,柳峰解析LBS与智能客服开发重难点?

大会现场蒋涛调查参会者,柳峰解析LBS与智能客服开发重难点?

如何查看php版本?多种方法助你快速知晓

如何查看php版本?多种方法助你快速知晓

PHP格式化:提升代码质量与协作效率的关键规则

标签

seo(1182) 市场营销(661) 网站制作(573) 网站建设(564) 搜索引擎(553) 网站(482) PHP(361) 编程语言(345) 建站(294) 关键词排名优化(267) 网站建设公司(245) 优化(216) seo排名(207) 域名(190) 软件(171) 网站优化(148) 搜索引擎优化(146) 外链(141) 科技(136) 网站关键词(124) 网站排名优化(123) 域名服务器(120) 网站排名(107) 时政(103) 排名优化(95) 搜索引擎收录(93) 网站设计(92) 电子商务(88) 引擎(86) 移动互联网(85) 开发框架(79) 开发(75) 网站服务器(74) 框架(68) 前端开发(68) 网站分析(66) 网站建设方案(65) 关键(64) 流量(63) 源码(62) 百度优化(62) 网站权重(61) 开放源代码(59) seo培训(53) 网页设计(51) 百度(51) php框架(50) 网站建设知识(50) 大数据(50) 谷歌(49)
宿迁腾云网络网站建设公司
网站建设
  • 私人定制
  • 标准模板建站
  • 经济模板建站
精品模板

宿迁腾云网络网站建设公司

联系电话:13160355545

公司地址:江苏省宿迁市丽景湾华庭北门都市花园公寓9楼907

联系邮箱:admin@tyweb.net

全国分站
  • 北京
  • 广东
  • 东莞 广州 中山 深圳 惠州 江门 珠海 汕头 佛山 湛江 河源 肇庆 潮州 清远 韶关 揭阳 阳江 云浮 茂名 梅州 汕尾
  • 山东
  • 济南 青岛 临沂 济宁 菏泽 烟台 泰安 淄博 潍坊 日照 威海 滨州 东营 聊城 德州 莱芜 枣庄
  • 江苏
  • 苏州 徐州 盐城 无锡 南京 南通 连云港 常州 扬州 镇江 淮安 泰州 宿迁
  • 河南
  • 郑州 南阳 新乡 安阳 洛阳 信阳 平顶山 周口 商丘 开封 焦作 驻马店 濮阳 三门峡 漯河 许昌 鹤壁 济源
  • 上海
  • 河北
  • 石家庄 唐山 保定 邯郸 邢台 沧州 秦皇岛 张家口 衡水 廊坊 承德
  • 浙江
  • 温州 宁波 杭州 台州 嘉兴 金华 湖州 绍兴 舟山 丽水 衢州
  • 陕西
  • 西安 咸阳 宝鸡 汉中 渭南 安康 榆林 商洛 延安 铜川
  • 湖南
  • 长沙 邵阳 常德 衡阳 株洲 湘潭 永州 岳阳 怀化 郴州 娄底 益阳 张家界 湘西
  • 重庆
  • 福建
  • 漳州 泉州 厦门 福州 莆田 宁德 三明 南平 龙岩
  • 天津
  • 云南
  • 昆明 红河 大理 文山 德宏 曲靖 昭通 楚雄 保山 玉溪 丽江 临沧 思茅 西双版纳 怒江 迪庆
  • 四川
  • 成都 绵阳 广元 达州 南充 德阳 广安 阿坝 巴中 遂宁 内江 凉山 攀枝花 乐山 自贡 泸州 雅安 宜宾 资阳 眉山 甘孜
  • 广西
  • 贵港 玉林 北海 南宁 柳州 桂林 梧州 钦州 来宾 河池 百色 贺州 崇左 防城港
  • 安徽
  • 芜湖 合肥 六安 宿州 阜阳 安庆 马鞍山 蚌埠 淮北 淮南 宣城 黄山 铜陵 亳州 池州 巢湖 滁州
  • 海南
  • 三亚 海口 琼海 文昌 东方
  • 江西
  • 南昌 赣州 上饶 吉安 九江 新余 抚州 宜春 景德镇 萍乡 鹰潭
  • 湖北
  • 武汉 宜昌 襄樊 荆州 恩施 孝感 黄冈 十堰 咸宁 黄石 仙桃 随州 天门 荆门 潜江 鄂州 神农架
  • 山西
  • 太原 大同 运城 长治 晋城 忻州 临汾 吕梁 晋中 阳泉 朔州
  • 辽宁
  • 大连 沈阳 丹东 辽阳 葫芦岛 锦州 朝阳 营口 鞍山 抚顺 阜新 本溪 盘锦 铁岭
  • 黑龙江
  • 齐齐哈尔 哈尔滨 大庆 佳木斯 双鸭山 牡丹江 鸡西 黑河 绥化 鹤岗 伊春 大兴安岭 七台河
  • 内蒙古
  • 赤峰 包头 通辽 呼和浩特 乌海 鄂尔多斯 呼伦贝尔
  • 贵州
  • 贵阳 黔东 黔南 遵义 黔西 毕节 铜仁 安顺 六盘水
  • 甘肃
  • 兰州 天水 庆阳 武威 酒泉 张掖 陇南 白银 定西 平凉 嘉峪关 临夏 金昌 甘南
  • 青海
  • 西宁 海西 海东 海北 果洛 玉树 黄南
  • 新疆
  • 乌鲁木齐 伊犁 昌吉 石河子 哈密
  • 西藏
  • 拉萨 山南 林芝 日喀则
  • 吉林
  • 长春 白山 白城 延边 松原 辽源 通化 四平
  • 宁夏
  • 银川 吴忠 中卫 石嘴山 固原
SiteMap
网站地图
TAG标签
Copyright © 2017-2025 TYWEB.NET 宿迁腾云网络科技有限公司 ALL RIGHTS RESERVED.   苏ICP备17033535号-1

热门搜索

百度 下载 2025 2024 2026 货源 货货源 虚拟 禅道 报名 金蝶KIS旗舰版
  • 客服

    在线客服

  • 电话

    13160355545

  • 微信

精品模板
建站费用
成功案例
联系我们