我对抽象的理解

问题描述

新人一个,学java两个多月了,说说我对抽象的理解。假设电脑系统坏了,那么我们脑中首先想的就是解决方法,这时脑中想的解决方法就是抽象的如:class装系统{publicabstractvoid修电脑方法_U盘();publicabstractvoid修电脑方法_光盘();publicabstractvoid修电脑方法_ghost镜像();}如上我们想到了三种安装系统的方法,一种是需要系统光盘,一种是需要一个做成启动项的U盘,并且里面有win7的镜像,一种是需要电脑中非系统盘符内写有win7系统的镜像,并且电脑内有一键ghost;那么我们开始找所需要的装系统工具,目前找到的工具只有一个U盘,U盘内与上述符合,那么开始用U盘装系统。代码如下:classU盘装系统extends装系统{publicabstractvoid修电脑方法_U盘(){将U盘插入电脑;找到镜像装系统;安装完毕;}}如上所写:我认为抽象放到现实生活就是,发生了一些问题需要你解决,你当时想的解决方法就是抽象到,当你按照你脑中那个方法做的时候就等于将抽象方法实现了,再举个例子:你的电脑坏了需要修理,你心里就想到了解决方法(abstract),然后你就用想到的方法去修理(实现)。其实人就是一个抽象与实现的个体,如果发生一件事,你自己能解决就等于你自己把抽象方法实现了。如果自己解决不了就找到其他实现了此类抽象方法的人。还拿修电脑说事:class张三{publicvoid吃饭;publicvoid喝水;}class张三的电脑{//张三没有这功能所以publicabstractvoid修理();}class修电脑的extends张三的电脑{publicabstractvoid找到毛病修理(){电脑r=修理();}private电脑修理(){修理完毕();return修完的电脑;}}请大神点评理解的对不对,至于代码小小得了

解决方案

本帖最后由 Anderson221317 于 2014-11-27 11:52:10 编辑
解决方案二:
抽象就是抽出像的地方class装系统{publicabstractvoid修电脑方法_U盘();publicabstractvoid修电脑方法_光盘();publicabstractvoid修电脑方法_ghost镜像();}这个不像类的封装,这个像工厂一样,提供修电脑的几种方式
解决方案三:
class装系统{publicabstractvoid修电脑方法_U盘();publicabstractvoid修电脑方法_光盘();publicabstractvoid修电脑方法_ghost镜像();}

如果用抽象,个人认为如下比较合适class装系统{publicabstractvoid修电脑方法();}然后U盘,光盘,ghost三种不同的实现类都继承Class装系统,分别实现修电脑方法()这个方法

解决方案四:
从头再学吧,一窍不通修电脑有3个抽象方法,你现在只有一个,其他两个不去实现的话,是不行的
解决方案五:
你这抽象抽的乱七八糟的。抽象是对现实世界共性描述的过程。之所以说面向对象比较好,是因为接近人的思维,更接近我们现实生活。一个类就是描述一类对象,一个对象就有描述对象的属性,以及一个对象所具有的能力体现在方法上面。比如张三是人的具体表现,那人就是对张三,李四,...的抽象,张三,李四是具体的可观存在,而人是抽象出来的,不是可观存在,为什么非要张三李四都叫人呢是因为符合人特征,人会说话,会吃饭,一个头有四肢,会走路,所以抽象为人,当然如果他们都瘸了,那也可以叫瘸子,因为符合瘸子的特征--腿瘸。这样跟现实很接近。把张三李四叫人的过程叫抽象。张三就是一个具体可观事物,也就是人的具体表现,叫做对象,张三李四抽象成人这个概念,人就是一个类。张三李四----》抽象----》人对象<------抽象------->类方法对类的能力的描述,人---吃饭;属性是对类象的特征描述,四肢,一个脑袋总结下,一个类一般是名词,属性也一般是名词,方法描述动作行为,一般是动词;再看你上面的问题:1、一个类名字能叫”装系统“这个就很不合适,2、修电脑的是个体,应该叫维修员代表一类3、装系统是方法不是一个类4、class修电脑的extends张三的电脑你这个表示什么,莫非给人安装了电脑的脑子?人怎么能继承电脑?以为是钢铁侠,给人安装芯片啊,电脑跟人一点关系都没有,怎么会继承,继承是子类要有父类的属性和方法。除非人能当电脑使用,那你这个可以。但是现实中大多数是不可能的。5、张三的电脑张三这些都是具体可观存在,是对象不是类应该是张三=new人();如果张三是维修人员那么张三=new维修人员();好好看书好好理解,你这全都不对。
解决方案六:
引用3楼cyf282501的回复:

从头再学吧,一窍不通修电脑有3个抽象方法,你现在只有一个,其他两个不去实现的话,是不行的

我这个只是看我对抽象的理解对不对,并不是主写代码,主要是看对抽象的理解
解决方案七:
哥们,抽象从本质上说是数学建模。面对一个复杂的业务,如何提取业务模型,这个事需求分析人员的任务。推荐下UML(统一建模语言)之类的教材,那上边对这个有很详细的解释。
解决方案八:
引用4楼zzq19860626的回复:

你这抽象抽的乱七八糟的。抽象是对现实世界共性描述的过程。之所以说面向对象比较好,是因为接近人的思维,更接近我们现实生活。一个类就是描述一类对象,一个对象就有描述对象的属性,以及一个对象所具有的能力体现在方法上面。比如张三是人的具体表现,那人就是对张三,李四,...的抽象,张三,李四是具体的可观存在,而人是抽象出来的,不是可观存在,为什么非要张三李四都叫人呢是因为符合人特征,人会说话,会吃饭,一个头有四肢,会走路,所以抽象为人,当然如果他们都瘸了,那也可以叫瘸子,因为符合瘸子的特征--腿瘸。这样跟现实很接近。把张三李四叫人的过程叫抽象。张三就是一个具体可观事物,也就是人的具体表现,叫做对象,张三李四抽象成人这个概念,人就是一个类。张三李四----》抽象----》人对象<------抽象------->类方法对类的能力的描述,人---吃饭;属性是对类象的特征描述,四肢,一个脑袋总结下,一个类一般是名词,属性也一般是名词,方法描述动作行为,一般是动词;再看你上面的问题:1、一个类名字能叫”装系统“这个就很不合适,2、修电脑的是个体,应该叫维修员代表一类3、装系统是方法不是一个类4、class修电脑的extends张三的电脑你这个表示什么,莫非给人安装了电脑的脑子?人怎么能继承电脑?以为是钢铁侠,给人安装芯片啊,电脑跟人一点关系都没有,怎么会继承,继承是子类要有父类的属性和方法。除非人能当电脑使用,那你这个可以。但是现实中大多数是不可能的。5、张三的电脑张三这些都是具体可观存在,是对象不是类应该是张三=new人();如果张三是维修人员那么张三=new维修人员();好好看书好好理解,你这全都不对。

那个class装系统代表的是人遇到问题所想的,就像如果你遇到问题,首先想的就是怎么解决,我这个就是在电脑系统坏掉之后想到了三种解决方法,但是三种必须选一种来实现。就好像高中毕业选大学一样,是选清华还是选蓝翔都是心里想到,而具体去哪里要看自己。class选学校{publicvoid去清华();publicvoid去蓝翔();}class录取通知书extends{publicvoid去清华(){}publicvoid去蓝翔(){}}class你自己{publicstaticvoidarg(StringXXX){录取通知书清华=new录取通知书();清华.去清华();}}可以说这就是一个学霸考完试想的,是能去清华还是能去蓝翔,通知书下来了学霸开始选!择首先我觉得在没选择之前心里想的都是抽象的,选择完毕之后才等于实现。我觉得你们都太在意代码了,代码是写的看看的并不是真要用的
解决方案九:
引用4楼zzq19860626的回复:

你这抽象抽的乱七八糟的。抽象是对现实世界共性描述的过程。之所以说面向对象比较好,是因为接近人的思维,更接近我们现实生活。一个类就是描述一类对象,一个对象就有描述对象的属性,以及一个对象所具有的能力体现在方法上面。比如张三是人的具体表现,那人就是对张三,李四,...的抽象,张三,李四是具体的可观存在,而人是抽象出来的,不是可观存在,为什么非要张三李四都叫人呢是因为符合人特征,人会说话,会吃饭,一个头有四肢,会走路,所以抽象为人,当然如果他们都瘸了,那也可以叫瘸子,因为符合瘸子的特征--腿瘸。这样跟现实很接近。把张三李四叫人的过程叫抽象。张三就是一个具体可观事物,也就是人的具体表现,叫做对象,张三李四抽象成人这个概念,人就是一个类。张三李四----》抽象----》人对象<------抽象------->类方法对类的能力的描述,人---吃饭;属性是对类象的特征描述,四肢,一个脑袋总结下,一个类一般是名词,属性也一般是名词,方法描述动作行为,一般是动词;再看你上面的问题:1、一个类名字能叫”装系统“这个就很不合适,2、修电脑的是个体,应该叫维修员代表一类3、装系统是方法不是一个类4、class修电脑的extends张三的电脑你这个表示什么,莫非给人安装了电脑的脑子?人怎么能继承电脑?以为是钢铁侠,给人安装芯片啊,电脑跟人一点关系都没有,怎么会继承,继承是子类要有父类的属性和方法。除非人能当电脑使用,那你这个可以。但是现实中大多数是不可能的。5、张三的电脑张三这些都是具体可观存在,是对象不是类应该是张三=new人();如果张三是维修人员那么张三=new维修人员();好好看书好好理解,你这全都不对。

好吧,看了回复我觉得我从理解上就走向了误区
解决方案十:
一般情况下,名词是对象,动词是方法,但这应该是“面向对象”吧。抽象的话应该类似于“生物”的概念吧。
解决方案十一:
不是很正确,likethis:abstractclass装系统{publicabstractvoid装系统方法();}publicclassU盘装系统extends装系统{publicvoid装系统方法(){//实现用U盘装系统}}publicclass光盘装系统extends装系统{publicvoid装系统方法(){//实现用光盘装系统}}publicclassGhost系统extends装系统{publicvoid装系统方法(){//实现用用Ghost还原系统}}抽象类是多态的一种,对调用者来说,也就是对电脑城的客户来说,他需要一个“装系统”的对象,对他来说,只关对象有“装系统方法”,具体怎么实现,由子类确定。
解决方案十二:
引用10楼hemowolf的回复:

不是很正确,likethis:abstractclass装系统{publicabstractvoid装系统方法();}publicclassU盘装系统extends装系统{publicvoid装系统方法(){//实现用U盘装系统}}publicclass光盘装系统extends装系统{publicvoid装系统方法(){//实现用光盘装系统}}publicclassGhost系统extends装系统{publicvoid装系统方法(){//实现用用Ghost还原系统}}抽象类是多态的一种,对调用者来说,也就是对电脑城的客户来说,他需要一个“装系统”的对象,对他来说,只关对象有“装系统方法”,具体怎么实现,由子类确定。

非常感谢
解决方案十三:
引用7楼Anderson221317的回复:

Quote: 引用4楼zzq19860626的回复:
你这抽象抽的乱七八糟的。抽象是对现实世界共性描述的过程。之所以说面向对象比较好,是因为接近人的思维,更接近我们现实生活。一个类就是描述一类对象,一个对象就有描述对象的属性,以及一个对象所具有的能力体现在方法上面。比如张三是人的具体表现,那人就是对张三,李四,...的抽象,张三,李四是具体的可观存在,而人是抽象出来的,不是可观存在,为什么非要张三李四都叫人呢是因为符合人特征,人会说话,会吃饭,一个头有四肢,会走路,所以抽象为人,当然如果他们都瘸了,那也可以叫瘸子,因为符合瘸子的特征--腿瘸。这样跟现实很接近。把张三李四叫人的过程叫抽象。张三就是一个具体可观事物,也就是人的具体表现,叫做对象,张三李四抽象成人这个概念,人就是一个类。张三李四----》抽象----》人对象<------抽象------->类方法对类的能力的描述,人---吃饭;属性是对类象的特征描述,四肢,一个脑袋总结下,一个类一般是名词,属性也一般是名词,方法描述动作行为,一般是动词;再看你上面的问题:1、一个类名字能叫”装系统“这个就很不合适,2、修电脑的是个体,应该叫维修员代表一类3、装系统是方法不是一个类4、class修电脑的extends张三的电脑你这个表示什么,莫非给人安装了电脑的脑子?人怎么能继承电脑?以为是钢铁侠,给人安装芯片啊,电脑跟人一点关系都没有,怎么会继承,继承是子类要有父类的属性和方法。除非人能当电脑使用,那你这个可以。但是现实中大多数是不可能的。5、张三的电脑张三这些都是具体可观存在,是对象不是类应该是张三=new人();如果张三是维修人员那么张三=new维修人员();好好看书好好理解,你这全都不对。

那个class装系统代表的是人遇到问题所想的,就像如果你遇到问题,首先想的就是怎么解决,我这个就是在电脑系统坏掉之后想到了三种解决方法,但是三种必须选一种来实现。就好像高中毕业选大学一样,是选清华还是选蓝翔都是心里想到,而具体去哪里要看自己。class选学校{publicvoid去清华();publicvoid去蓝翔();}class录取通知书extends{publicvoid去清华(){}publicvoid去蓝翔(){}}class你自己{publicstaticvoidarg(StringXXX){录取通知书清华=new录取通知书();清华.去清华();}}可以说这就是一个学霸考完试想的,是能去清华还是能去蓝翔,通知书下来了学霸开始选!择首先我觉得在没选择之前心里想的都是抽象的,选择完毕之后才等于实现。我觉得你们都太在意代码了,代码是写的看看的并不是真要用的

有这样的代码就有这样的思维,这思维就不对。
解决方案十四:
看来还不值楼主一个人不会面向对象编程,估计很多事学C过来的吧
解决方案十五:
引用5楼Anderson221317的回复:

Quote: 引用3楼cyf282501的回复:
从头再学吧,一窍不通修电脑有3个抽象方法,你现在只有一个,其他两个不去实现的话,是不行的

我这个只是看我对抽象的理解对不对,并不是主写代码,主要是看对抽象的理解

代码就是理解的体现,我要说的是,抽象是用来定义规范的,你既然定义了三个抽象方法,这就是一种规范,是必须要去实现的,这也是抽象的作用“定义规范”
解决方案:
/*修电脑的方法*/abstractclasswaysOfRepairPC{//重装系统方法有很多,所有方法统一抽象成一个抽象方法way(此处是根据楼主的意思写的,细细想来应该是一个属性标识就可以,子类中构造时赋予不同值)publicabstractvoidway();}classUSBWayextendswaysOfRepairPC{//第一种方法:U盘安装,这是对抽象的安装系统方法的一个具体实现publicvoidway(){System.out.println("U盘装系统");}}classCDWayextendswaysOfRepairPC{//第二种方法:光盘安装,这是对抽象的安装系统方法的又一个具体实现publicvoidway(){System.out.println("光盘装系统");}}classGhostWayextendswaysOfRepairPC{//第三种方法:Ghost安装,这是对抽象的安装系统方法的最后一个具体实现publicvoidway(){System.out.println("Ghost装系统");}}/*张三来修电脑问题,这里不是继承关系,而应该是合成关系*/classMan{privateStringname;privatewaysOfRepairPCway;publicMan(Stringname,waysOfRepairPCway){this.name=name;this.way=way;}}publicclassTest{publicstaticvoidmain(String[]args){ManzhangSan=newMan("zhangsan",newUSBWay());//张三是一个修电脑的人,他会的修电脑方法是U盘安装ManliSi=newMan("lisi",newCDWay());//李四是一个修电脑的人,他会的修电脑方法是光盘安装}}

我的理解新毕业的程序员有错的请各位指正
解决方案:
引用15楼u012171905的回复:

/*修电脑的方法*/abstractclasswaysOfRepairPC{//重装系统方法有很多,所有方法统一抽象成一个抽象方法way(此处是根据楼主的意思写的,细细想来应该是一个属性标识就可以,子类中构造时赋予不同值)publicabstractvoidway();}classUSBWayextendswaysOfRepairPC{//第一种方法:U盘安装,这是对抽象的安装系统方法的一个具体实现publicvoidway(){System.out.println("U盘装系统");}}classCDWayextendswaysOfRepairPC{//第二种方法:光盘安装,这是对抽象的安装系统方法的又一个具体实现publicvoidway(){System.out.println("光盘装系统");}}classGhostWayextendswaysOfRepairPC{//第三种方法:Ghost安装,这是对抽象的安装系统方法的最后一个具体实现publicvoidway(){System.out.println("Ghost装系统");}}/*张三来修电脑问题,这里不是继承关系,而应该是合成关系*/classMan{privateStringname;privatewaysOfRepairPCway;publicMan(Stringname,waysOfRepairPCway){this.name=name;this.way=way;}}publicclassTest{publicstaticvoidmain(String[]args){ManzhangSan=newMan("zhangsan",newUSBWay());//张三是一个修电脑的人,他会的修电脑方法是U盘安装ManliSi=newMan("lisi",newCDWay());//李四是一个修电脑的人,他会的修电脑方法是光盘安装}}

我的理解新毕业的程序员有错的请各位指正

URcorrect
解决方案:
抽象类感觉还是用的比较少,抽象方法必须定义在抽象类中
解决方案:
抽象就是把若干实体的共同的特性或行为抽出来,放到一起。是一种建模的手段。像你说的这些修电脑的流程,是因为他们都有这些过程,你脑子里想出这些步骤的脑力劳动就是抽象的过程。而不是具体的实现上。至于java中的抽象类,只要知道有没实现的方法要子类实现就好了,不用执着于这些术语的理解
解决方案:
看2L,修电脑就是抽象的,至于修哪个部位,就是继承抽象(修电脑)的一个实现(修电脑的主板).
解决方案:
两个月....水
解决方案:
人类<--张三,但张三会抽烟,那么人类应该定义成抽象类,而抽烟应该是一个接口,这个张三继承了人类,有人的基础行为,而且他还会抽烟,继承一般要抽象出最基本的功能,为了实现复用,关系式is-a,而接口是像一个islikea,他像一个人类,因为他有自己的行为,甚至覆写了人类某些特性,比如他可能手上了,少了一只手。接口是功能性的,表述性的,你实现完了,他就有这个功能,讲的是一个点。抽象类,是贯穿性的,是一条线,总领全局。
解决方案:
你这个还是用接口比较好
解决方案:
用抽象又不如用接口,抽象就好像,你给别人一件衣服的图纸,然后他就照着这样做出来,,相当于一个模板,,只不过这个模板实现不了功能,只有拥有这个模板的人才能实现

时间: 2024-11-03 01:06:12

我对抽象的理解的相关文章

理解表现和结构相分离

 对于初学者,我们常看见web标准的好处之一是"能做到表现和结构相分离",那这到底是什么意思呢?我将以一个实际的例子来详细说明.首先我们必须先明白一些基本的概念:内容.结构.表现和行为    1.内容 内容就是页面实际要传达的真正信息,包含数据.文档或者图片等.注意这里强调的"真正",是指纯粹的数据信息本身.比如一个不包含辅助的信息,比如导航菜单.装饰性图片等.举个例子,有下面一段文本是我们页面要表现的信息.        忆江南(1)唐.白居易江南好,风景旧曾谙.

深入理解JavaScript系列(10) JavaScript核心(晋级高手必读篇)_javascript技巧

适合的读者:有经验的开发员,专业前端人员. 原作者: Dmitry A. Soshnikov 发布时间: 2010-09-02 原文:http://dmitrysoshnikov.com/ecmascript/javascript-the-core/ 参考1:http://ued.ctrip.com/blog/?p=2795 参考2:http://www.cnblogs.com/ifishing/archive/2010/12/08/1900594.html 主要是综合了上面2位高手的中文翻译,

ES7 decorator 装饰者模式

1.装饰模式 设计模式大家都有了解,网上有很多系列教程,比如 JS设计模式等等. 这里只分享 装饰者模式 以及在 如何使用 ES7 的 decorator 概念 1.1.装饰模式 v.s. 适配器模式 装饰模式和适配器模式都是"包装模式"(Wrapper Pattern),它们都是通过封装其他对象达到设计的目的的,但是它们的形态有很大区别. 适配器模式我们使用的场景比较多,比如连接不同数据库的情况,你需要包装现有的模块接口,从而使之适配数据库 -- 好比你手机使用转接口来适配插座那样:

mod

  这篇文章主要介绍了mod_php.FastCGI.PHP-FPM等PHP运行方式对比,本文讲解了什么是PHP处理器(PHP handlers).mod_php的优缺点.FastCGI的优缺点.PHP-FPM(FastCGI Process Manager)的优缺点等内容,需要的朋友可以参考下 概述 写这篇文章的是因为今天要Ubuntu下搭建LNMP环境,Nginx使用的是PHP-FPM,所以对Web服务器与PHP解释器的交互方式做了个整理. 众所周知,PHP是跨平台.跨服务器的语言,这也是它

JS和函数式语言的三特性

       本文内容是我阅读<JavaScript语言精髓与编程实践>时,做的读书笔记,周爱民老师的书写的太深刻了 首先要有一个概念:并不是一个语言支持函数,这个语言就可以叫做"函数式语言".函数式语言中的函数(function),除了能被调用之外,还具有一些其他性质.有以下三点: 1. 函数是运算元 2. 在函数内保存数据 3. 函数内的运算对函数外无副作用 一.函数是运算元 普通的函数调用时,可以抽象的理解为:函数就是一个运算符,传入的参数是运算元; 但当JavaSc

[Unity 设计模式]IOC依赖倒置

1.前言 最近在看<游戏开发与设计模式>一书,看到控制反转设计模式,作者说:上层模块不应该依赖于下层模块,上层模块和下层模块都应该依赖于接口,这样能减少耦合.然后附带举了个例子,我觉得特别好,就是一台计算机是属于上层模块,里面硬盘属于下层模块,计算机依赖于硬盘,硬盘是计算机的基本组成部件之一.这里提到依赖一词,下面就详细谈谈依赖. 2.依赖 依赖就是一种联系关系,人对人的依赖那是一种羁绊关系.再拿上面的计算机举例,华硕是我们都耳熟能详的计算机厂商,西部数据和希捷都是硬盘厂商,如果说华硕依赖于某

mod_php、FastCGI、PHP-FPM等PHP运行方式对比_php技巧

概述 写这篇文章的是因为今天要Ubuntu下搭建LNMP环境,Nginx使用的是PHP-FPM,所以对Web服务器与PHP解释器的交互方式做了个整理. 众所周知,PHP是跨平台.跨服务器的语言,这也是它如此流行的原因之一.但是,很少有人知道PHP解释器可以以不同的方式运行在Web服务器中.PHP最常用的方式是以模块的方式(mod_php)运行在Apache中,也是Apache运行PHP的默认方式.但是在Nginx中,Nginx又使用的是PHP-FPM. 这篇文章就对这些概念做个介绍,如有不对的地

一篇UI规范文件

这是一个UI模板规范,在做B/S版应用程序时比较适用,其实这样的东西算不上什么正规的规范,只是为了适应我们现在面对的开发环境和组织流程做的一些权宜的努力,和解决了一些与程序沟通和接口的问题,尽量避免误会和摩擦. 一.适用环境和对象二.必要性三.技术原则四.代码编写规范五.页面模版使用规范 一.适用环境和对象本规范适用基于浏览器的B/S版软件项目开发工作.开发流程中的模版页面编写和模版文件套用工作必须遵照此规范执行.适用对象为开发编码人员.UI设计人员.模版编写人员.界面测试人员等.基于客户端的C

胡喜:我是如何从菜鸟做到架构师的

中介交易 SEO诊断 淘宝客 云主机 技术大厅 作为一个不是科班出身.没有正规学习过计算机知识的架构师,想在这里把我这几年学习的经历体验和大家分享一下,谈谈自己对架构师成长之路的一些感想. 奠定扎实的理论基础 千里之行,始于足下!技术不是一蹴而就的事情,而是长时间积累的成果.扎实的基本功是做好所有事情的开始.到现在我还记得对我影响非常大的几本书: ■<C++编程思想> ■<深入浅出MFC> ■<Windows 核心编程> ■<数据结构><编译原理>