extjs封装怎样将一组数据封装为一个对象并传至controller

利用面向对象的方法设计一个汽车的类! 并利用该类创造一个汽车对象!_百度知道
利用面向对象的方法设计一个汽车的类! 并利用该类创造一个汽车对象!
等基本信息(类成员)启动、排量、型号该类应该具有汽车的颜色、行驶、生产厂商、转向、刹车
提问者采纳
&#47/汽车可以进行的操作
public abstract 返回类型 do启动{}
public abstract 返回类型 do行驶{}
public abstract
返回类型 do转向{}
public abstract 返回类型 do刹车{}
public abstract 返回类型 do驻车{}}&#47,设置所有属性;汽车拥有的属性
private 颜色
private 排量
private 生产厂商
//汽车接口类public interface car{
//实现接口中的所有方法;&#47
其他类似问题
您可能关注的推广
面向对象的相关知识
其他4条回答
估计你正在学习编程语言,估计需要很长时间。
“所见即所得”的编程思想为原则,力图实现编程工作的可视化,即随时可以看到结果,程序与结果的调整同步。
可视化编程是与传统的编程方式相比而言的,这里的“可视”,指的是无须编程,仅通过直观的操作方式即可完成界面的设计工作,是目前最好的Windows应用程序开发工具。
可视化编程语言的特点主要表现在两个方面:一是基于面向对象的思想,引入了控件的概念和事件驱动;二是程序开发过程一般遵循以下步骤,即先进行界面的绘制工作,再基于事件编写程序代码,以响应鼠标、键盘的各种动作。
可视化编程十问
1. 什么是可视化程序设计?
可视化(Visual)程序设计是一种全新的程序设计方法,它主要是让程序设计人员利用软件本身所提供的各种控件,像搭积木式地构造应用程序的各种界面。
2. 可视化程序设计有哪些优点?
可视化程序设计最大的优点是设计人员可以不用编写或只需编写很少的程序代码,就能完成应用程序的设计,这样就能极大地提高设计人员的工作效率。
3. 能够进行可视化程序设计的语言有哪些?
能进行可视化程序设计的语言很多,比较常用的有微软的Visual Basic、Visual C++、中文Visual Foxpro、Borland公司的Delphi等。
4. 可视化程序设计中有哪些基本概念?
主要的几个基本概念有表单、组件、属性、事件、方法等。
5. 什么是表单(Form)?
表单是指进行程序设计时的窗口,我们主要是通过在表单中放置各种部件(如命令按钮、复选框、单选框、滚动条等)来布置应用程序的运行界面。
6. 什么是组件?
所谓组件,就是组成程序运行界面的各种部件,如:命令按钮、复选框、单选框、滚动条等。
7. 什么是属性?
属性就是组件的性质。它说明组件在程序运行的过程中是如何显示的、组件的大小是多少、显示在何处、是否可见、是否有效……
8. 属性可以分成哪几类?
属性可分成三类,设计属性:是在进行设计时就可发挥作用的属性;运行属性:这是在程序运行过程中才发挥作用的属性;只读属性:是一种只能查看而不能改变的属性。
9. 什么是事件?
事件就是对一个组件的操作。如用鼠标点击一个命令按钮,在这里,点击鼠标就称为一个事件(Click事件)。
10. 什么是方法?
方法就是某个事件发生后要执行的具体操作,类似以前的程序。例如当我们用鼠标单击“退出”命令按钮时,程序就会通过执行一条命令而结束运行,命令的执行过程就叫方法。面向对象程序设计
1.历史回顾
1967年挪威计算中心的Kisten Nygaard和Ole Johan Dahl开发了Simula67语言,它提供了比子程序更高一级的抽象和封装,引入了数据抽象和类的概念,它被认为是第一个面向对象语言。20世纪70年代初,Palo Alto研究中心的Alan Kay所在的研究小组开发出Smalltalk语言,之后又开发出Smalltalk-80,Smalltalk-80被认为是最纯正的面向对象语言,它对后来出现的面向对象语言,如Object-C,C++,Self,Eiffl都产生了深远的影响。随着面向对象语言的出现,面向对象程序设计也就应运而生且得到迅速发展。之后,面向对象不断向其他阶段渗透,1980年Grady Booch提出了面向对象设计的概念,之后面向对象分析开始。1985年,第一个商用面向对象数据库问世。1990年以来,面向对象分析、测试、度量和管理等研究都得到长足发展。
实际上,“对象”和“对象的属性”这样的概念可以追溯到20世纪50年代初,它们首先出现于关于人工智能的早期著作中。但是出现了面向对象语言之后,面向对象思想才得到了迅速的发展。过去的几十年中,程序设计语言对抽象机制的支持程度不断提高:从机器语言到汇编语言,到高级语言,直到面向对象语言。汇编语言出现后,程序员就避免了直接使用0-1,而是利用符号来表示机器指令,从而更方便地编写程序;当程序规模继续增长的时候,出现了Fortran、C、Pascal等高级语言,这些高级语言使得编写复杂的程序变得容易,程序员们可以更好地对付日益增加的复杂性。但是,如果软件系统达到一定规模,即使应用结构化程序设计方法,局势仍将变得不可控制。作为一种降低复杂性的工具,面向对象语言产生了,面向对象程序设计也随之产生。
2.面向对象程序设计的基本概念
面向对象程序设计中的概念主要包括:对象、类、数据抽象、继承、动态绑定、数据封装、多态性、消息传递。通过这些概念面向对象的思想得到了具体的体现。
对象是运行期的基本实体,它是一个封装了数据和操作这些数据的代码的逻辑实体。
类是具有相同类型的对象的抽象。一个对象所包含的所有数据和代码可以通过类来构造。
封装是将数据和代码捆绑到一起,避免了外界的干扰和不确定性。对象的某些数据和代码可以是私有的,不能被外界访问,以此实现对数据和代码不同级别的访问权限。
继承是让某个类型的对象获得另一个类型的对象的特征。通过继承可以实现代码的重用:从已存在的类派生出的一个新类将自动具有原来那个类的特性,同时,它还可以拥有自己的新特性。
多态是指不同事物具有不同表现形式的能力。多态机制使具有不同内部结构的对象可以共享相同的外部接口,通过这种方式减少代码的复杂度。
6)动态绑定
绑定指的是将一个过程调用与相应代码链接起来的行为。动态绑定是指与给定的过程调用相关联的代码只有在运行期才可知的一种绑定,它是多态实现的具体形式。
7)消息传递
对象之间需要相互沟通,沟通的途径就是对象之间收发信息。消息内容包括接收消息的对象的标识,需要调用的函数的标识,以及必要的信息。消息传递的概念使得对现实世界的描述更容易。
3.面向对象语言
一个语言要称为面向对象语言必须支持几个主要面向对象的概念。根据支持程度的不同,通常所说的面向对象语言可以分成两类:基于对象的语言,面向对象的语言。
基于对象的语言仅支持类和对象,而面向对象的语言支持的概念包括:类与对象、继承、多态。举例来说,Ada就是一个典型的基于对象的语言,因为它不支持继承、多态,此外其他基于对象的语言还有Alphard、CLU、Euclid、Modula。面向对象的语言中一部分是新发明的语言,如Smalltalk、Java,这些语言本身往往吸取了其他语言的精华,而又尽量剔除他们的不足,因此面向对象的特征特别明显,充满了蓬勃的生机;另外一些则是对现有的语言进行改造,增加面向对象的特征演化而来的。如由Pascal发展而来的Object Pascal,由C发展而来的Objective-C,C++,由Ada发展而来的Ada 95等,这些语言保留着对原有语言的兼容,并不是纯粹的面向对象语言,但由于其前身往往是有一定影响的语言,因此这些语言依然宝刀不老,在程序设计语言中占有十分重要的地位。
4.面向对象程序设计的优点
面向对象出现以前,结构化程序设计是程序设计的主流,结构化程序设计又称为面向过程的程序设计。在面向过程程序设计中,问题被看作一系列需要完成的任务,函数(在此泛指例程、函数、过程)用于完成这些任务,解决问题的焦点集中于函数。其中函数是面向过程的,即它关注如何根据规定的条件完成指定的任务。
在多函数程序中,许多重要的数据被放置在全局数据区,这样它们可以被所有的函数访问。每个函数都可以具有它们自己的局部数据。下图显示了一个面向过程程序中函数和数据的关系。
图1 面向过程程序设计中函数和数据的关系示例
这种结构很容易造成全局数据在无意中被其他函数改动,因而程序的正确性不易保证。面向对象程序设计的出发点之一就是弥补面向过程程序设计中的一些缺点:对象是程序的基本元素,它将数据和操作紧密地连结在一起,并保护数据不会被外界的函数意外地改变。下图显示了一个面向对象程序中对象与函数和数据的关系。
图2 面向对象程序设计中函数和数据的关系示例
比较面向对象程序设计和面向过程程序设计,还可以得到面向对象程序设计的其他优点:
1)数据抽象的概念可以在保持外部接口不变的情况下改变内部实现,从而减少甚至避免对外界的干扰;
2)通过继承大幅减少冗余的代码,并可以方便地扩展现有代码,提高编码效率,也减低了出错概率,降低软件维护的难度;
3)结合面向对象分析、面向对象设计,允许将问题域中的对象直接映射到程序中,减少软件开发过程中中间环节的转换过程;
4)通过对对象的辨别、划分可以将软件系统分割为若干相对为独立的部分,在一定程度上更便于控制软件复杂度;
6)以对象为中心的设计可以帮助开发人员从静态(属性)和动态(方法)两个方面把握问题,从而更好地实现系统;
7)通过对象的聚合、联合可以在保证封装与抽象的原则下实现对象在内在结构以及外在功能上的扩充,从而实现对象由低到高的升级。
面对对象的程序设计方法
在数据输入模块内部设计中,采用面向对象的设计方法。[6]面向对象的基本概念如下:
对象:对象是要研究的任何事物。从一本书到一家图书馆,单的整数到整数列庞大的数据库、极其复杂的自动化工厂、航天飞机都可看作对象,它不仅能表示有形的实体,也能表示无形的(抽象的)规则、计划或事件。对象由数据(描述事物的属性)和作用于数据的操作(体现事物的行为)构成一独立整体。从程序设计者来看,对象是一个程序模块,从用户来看,对象为他们提供所希望的行为。在对内的操作通常称为方法。
类:类是对象的模板。即类是对一组有相同数据和相同操作的对象的定义,一个类所包含的方法和数据描述一组对象的共同属性和行为。类是在对象之上的抽象,对象则是类的具体化,是类的实例。类可有其子类,也可有其它类,形成类层次结构。
消息:消息是对象之间进行通信的一种规格说明。一般它由三部分组成:接收消息的对象、消息名及实际变元。
面向对象主要特征:
封装性:封装是一种信息隐蔽技术,它体现于类的说明,是对象的重要特性。封装使数据和加工该数据的方法(函数)封装为一个整体,以实现独立性很强的模块,使得用户只能见到对象的外特性(对象能接受哪些消息,具有那些处理能力),而对象的内特性(保存内部状态的私有数据和实现加工能力的算法)对用户是隐蔽的。封装的目的在于把对象的设计者和对象者的使用分开,使用者不必知晓行为实现的细节,只须用设计者提供的消息来访问该对象。
继承性:继承性是子类自动共享父类之间数据和方法的机制。它由类的派生功能体现。一个类直接继承其它类的全部描述,同时可修改和扩充。继承具有传递性。继承分为单继承(一个子类只有一父类)和多重继承(一个类有多个父类)。类的对象是各自封闭的,如果没继承性机制,则类对象中数据、方法就会出现大量重复。继承不仅支持系统的可重用性,而且还促进系统的可扩充性。
多态性:对象根据所接收的消息而做出动作。同一消息为不同的对象接受时可产生完全不同的行动,这种现象称为多态性。利用多态性用户可发送一个通用的信息,而将所有的实现细节都留给接受消息的对象自行决定,如是,同一消息即可调用不同的方法。例如:Print消息被发送给一图或表时调用的打印方法与将同样的Print消息发送给一正文文件而调用的打印方法会完全不同。多态性的实现受到继承性的支持,利用类继承的层次关系,把具有通用功能的协议存放在类层次中尽可能高的地方,而将实现这一功能的不同方法置于较低层次,这样,在这些低层次上生成的对象就能给通用消息以不同的响应。在OOPL中可通过在派生类中重定义基类函数(定义为重载函数或虚函数)来实现多态性。
综上可知,在面对对象方法中,对象和传递消息分别表现事物及事物间相互联系的概念。类和继承是是适应人们一般思维方式的描述范式。方法是允许作用于该类对象上的各种操作。这种对象、类、消息和方法的程序设计范式的基本点在于对象的封装性和类的继承性。通过封装能将对象的定义和对象的实现分开,通过继承能体现类与类之间的关系,以及由此带来的动态联编和实体的多态性,从而构成了面向对象的基本特征。
面向对象设计是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,是建立在“对象”概念基础上的方法学。对象是由数据和容许的操作组成的封装体,与客观实体有直接对应关系,一个对象类定义了具有相似性质的一组对象。而每继承性是对具有层次关系的类的属性和操作进行共享的一种方式。所谓面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制,来认识、理解、刻画客观世界和设计、构建相应的软件系统。。按照Bjarne STroustRUP的说法,面向对象的编程范式:
l 决定你要的类;
2 给每个类提供完整的一组操作;
3 明确地使用继承来表现共同点。
由这个定义,我们可以看出:面向对象设计就是“根据需求决定所需的类、类的操作以及类之间关联的过程”。
面向对象设计方法的特点和面临的问题
面向对象设计方法以对象为基础,利用特定的软件工具直接完成从对象客体的描述到软件结构之间的转换。这是面向对象设计方法最主要的特点和成就。面向对象设计方法的应用解决了传统结构化开发方法中客观世界描述工具与软件结构的不一致性问题,缩短了开发周期,解决了从分析和设计到软件模块结构之间多次转换映射的繁杂过程,是一种很有发展前途的系统开发方法。
但是同原型方法一样, 面向对象设计方法需要一定的软件基础支持才可以应用,另外在大型的MIS开发中如果不经自顶向下的整体划分,而是一开始就自底向上的采用面向对象设计方法开发系统,同样也会造成系统结构不合理、各部分关系失调等问题。所以面向对象设计方法和结构化方法目前仍是两种在系统开发领域相互依存的、不可替代的方法。
1.编程模型 所有计算机均由两种元素组成:代码和数据.精确的说,有些程序是围绕着&什么正在发生&而编写,有些则是围绕&谁正在受影响&而编写的. 第一种编程方式叫做&面向过程的模型&,按这种模型编写的程序以一系列的线性步骤(代码)为特征,可被理解为作用于数据的代码.如 C 等过程化语言. 第二种编程方式叫做&面向对象的模型&,按这种模型编写的程序围绕着程序的数据(对象)和针对该对象而严格定义的接口来组织程序,它的特点是数据控制代码的访问.通过把控制权转移到数据上,面向对象的模型在组织方式上有:抽象,封装,继承和多态的好处. 2.抽象 面向对象程序设计的基本要素是抽象,程序员通过抽象来管理复杂性. 管理抽象的有效方法是使用层次式的分类特性,这种方法允许用户根据物理含义分解一个复杂的系统,把它划分成更容易管理的块.例如,一个计算机系统是一个独立的对象.而在计算机系统内部由几个子系统组成:显示器,键盘,硬盘驱动器,DVD-ROM,软盘,音响等,这些子系统每个又由专门的部件组成.关键是需要使用层次抽象来管理计算机系统(或其他任何复杂系统)的复杂性. 面向对象程序设计的本质:这些抽象的对象可以被看作具体的实体,这些实体对用来告诉我们作什么的消息进行响应. /* (我的理解) *计算机是一个实体,我要输入字符,显示器显示出来,那么 *计算机(对象).输入(键盘属性).显示(显示方法) *使用分层来引用,操作.而不用管计算机内部如何处理. *只要有计算机对象,它就能响应我的操作,而我敲键盘, *计算机对象就把这个消息传给屏幕,屏幕显示. */ 计算机对象包含了它所有的属性,以及操作,这就是面向对象程序设计的三大原则之一:封装. 3.封装 封装是一种把代码和代码所操作的数据捆绑在一起,使这两者不受外界干扰和误用的机制.封装可被理解为一种用做保护的包装器,以防止代码和数据被包装器外部所定义的其他代码任意访问.对包装器内部代码与数据的访问通过一个明确定义的接口来控制.封装代码的好处是每个人都知道怎样访问代码,进而无需考虑实现细节就能直接使用它,同时不用担心不可预料的副作用. 在JAVA中,最基本的封装单元是类,一个类定义着将由一组对象所共享的行为(数据和代码).一个类的每个对象均包含它所定义的结构与行为,这些对象就好象是一个模子铸造出来的.所以对象也叫做类的实例. 在定义一个类时,需要指定构成该类的代码与数据.特别是,类所定义的对象叫做成员变量或实例变量.操作数据的代码叫做成员方法.方法定义怎样使用成员变量,这意味着类的行为和接口要由操作实例数据的方法来定义. 由于类的用途是封装复杂性,所以类的内部有隐藏实现复杂性的机制.所以JAVA中提供了私有和公有的访问模式,类的公有接口代表外部的用户应该知道或可以知道的每件东西.私有的方法数据只能通过该类的成员代码来访问.这就可以确保不会发生不希望的事情. 4.继承 继承是指一个对象从另一个对象中获得属性的过程.是面向对象程序设计的三大原则之二,它支持按层次分类的概念.例如,波斯猫是猫的一种,猫又是哺乳动物的一种,哺乳动物又是动物的一种.如果不使用层次的概念,每个对象需要明确定义各自的全部特征.通过层次分类方式,一个对象只需要在它的类中定义是它成为唯一的 各个属性,然后从父类中继承它的通用属性.因此,正是由于继承机制,才使得一个对象可以成为一个通用类的一个特定实例.一个深度继承的子类将继承它在类层次中的每个祖先的所有属性. 继承与封装可以互相作用.如果一个给定的类封装了某些属性,它的任何子类将会含有同样得属性,另加各个子类所有得属性.这是面向对象程序在复杂性上呈线性而非几何增长的一个重要概念.新的子类继承其所有祖先的所有属性.子类和系统中的其他代码不会产生无法预料的交互作用. 5.多态 多态是指一个方法只能有一个名称,但可以有许多形态,也就是程序中可以定义多个同名的方法,用&一个接口,多个方法&来描述.可以通过方法的参数和类型引用. 6.封装,继承,多态的组合使用 在由封装,继承,多态所组成的环境中,程序员可以编写出比面向过程模型更健壮,更具扩展性的程序.经过仔细设计的类层次结构是重用代码的基础.封装能让程序员不必修改公有接口的代码即可实现程序的移植.多态能使程序员开发出简洁,易懂,易修改的代码.例如:汽车 从继承的角度看,驾驶员都依靠继承性来驾驶不同类型(子类)的汽车,无论这辆车是轿车还是卡车,是奔驰牌还是菲亚特牌,驾驶员都能找到方向盘,手刹,换档器.经过一段时间驾驶后,都能知道手动档与自动档之间的差别,因为他们实际上都知道这两者的共同超类:传动装置. 从封装的角度看,驾驶员总是看到封装好的特性.刹车隐藏了许多复杂性,其外观如此简单,用脚就能操作它.发动机,手刹,轮胎大小的实现对与刹车类的定义没有影响. 从多态的角度看,刹车系统有正锁反锁之分,驾驶员只用脚踩刹车停车,同样的接口可以用来控制若干种不同的实现(正锁或反锁). 这样各个独立的构件才被转换为汽车这个对象的.同样,通过使用面向对象的设计原则,程序员可以把一个复杂程序的各个构件组合在一起,形成一个一致,健壮,可维护的程序
1.编程模型 所有计算机均由两种元素组成:代码和数据.精确的说,有些程序是围绕着&什么正在发生&而编写,有些则是围绕&谁正在受影响&而编写的. 第一种编程方式叫做&面向过程的模型&,按这种模型编写的程序以一系列的线性步骤(代码)为特征,可被理解为作用于数据的代码.如 C 等过程化语言. 第二种编程方式叫做&面向对象的模型&,按这种模型编写的程序围绕着程序的数据(对象)和针对该对象而严格定义的接口来组织程序,它的特点是数据控制代码的访问.通过把控制权转移到数据上,面向对象的模型在组织方式上有:抽象,封装,继承和多态的好处. 2.抽象 面向对象程序设计的基本要素是抽象,程序员通过抽象来管理复杂性. 管理抽象的有效方法是使用层次式的分类特性,这种方法允许用户根据物理含义分解一个复杂的系统,把它划分成更容易管理的块.例如,一个计算机系统是一个独立的对象.而在计算机系统内部由几个子系统组成:显示器,键盘,硬盘驱动器,DVD-ROM,软盘,音响等,这些子系统每个又由专门的部件组成.关键是需要使用层次抽象来管理计算机系统(或其他任何复杂系统)的复杂性. 面向对象程序设计的本质:这些抽象的对象可以被看作具体的实体,这些实体对用来告诉我们作什么的消息进行响应. /* (我的理解) *计算机是一个实体,我要输入字符,显示器显示出来,那么 *计算机(对象).输入(键盘属性).显示(显示方法) *使用分层来引用,操作.而不用管计算机内部如何处理. *只要有计算机对象,它就能响应我的操作,而我敲键盘, *计算机对象就把这个消息传给屏幕,屏幕显示. */ 计算机对象包含了它所有的属性,以及操作,这就是面向对象程序设计的三大原则之一:封装. 3.封装 封装是一种把代码和代码所操作的数据捆绑在一起,使这两者不受外界干扰和误用的机制.封装可被理解为一种用做保护的包装器,以防止代码和数据被包装器外部所定义的其他代码任意访问.对包装器内部代码与数据的访问通过一个明确定义的接口来控制.封装代码的好处是每个人都知道怎样访问代码,进而无需考虑实现细节就能直接使用它,同时不用担心不可预料的副作用. 在JAVA中,最基本的封装单元是类,一个类定义着将由一组对象所共享的行为(数据和代码).一个类的每个对象均包含它所定义的结构与行为,这些对象就好象是一个模子铸造出来的.所以对象也叫做类的实例. 在定义一个类时,需要指定构成该类的代码与数据.特别是,类所定义的对象叫做成员变量或实例变量.操作数据的代码叫做成员方法.方法定义怎样使用成员变量,这意味着类的行为和接口要由操作实例数据的方法来定义. 由于类的用途是封装复杂性,所以类的内部有隐藏实现复杂性的机制.所以JAVA中提供了私有和公有的访问模式,类的公有接口代表外部的用户应该知道或可以知道的每件东西.私有的方法数据只能通过该类的成员代码来访问.这就可以确保不会发生不希望的事情. 4.继承 继承是指一个对象从另一个对象中获得属性的过程.是面向对象程序设计的三大原则之二,它支持按层次分类的概念.例如,波斯猫是猫的一种,猫又是哺乳动物的一种,哺乳动物又是动物的一种.如果不使用层次的概念,每个对象需要明确定义各自的全部特征.通过层次分类方式,一个对象只需要在它的类中定义是它成为唯一的 各个属性,然后从父类中继承它的通用属性.因此,正是由于继承机制,才使得一个对象可以成为一个通用类的一个特定实例.一个深度继承的子类将继承它在类层次中的每个祖先的所有属性. 继承与封装可以互相作用.如果一个给定的类封装了某些属性,它的任何子类将会含有同样得属性,另加各个子类所有得属性.这是面向对象程序在复杂性上呈线性而非几何增长的一个重要概念.新的子类继承其所有祖先的所有属性.子类和系统中的其他代码不会产生无法预料的交互作用. 5.多态 多态是指一个方法只能有一个名称,但可以有许多形态,也就是程序中可以定义多个同名的方法,用&一个接口,多个方法&来描述.可以通过方法的参数和类型引用. 6.封装,继承,多态的组合使用 在由封装,继承,多态所组成的环境中,程序员可以编写出比面向过程模型更健壮,更具扩展性的程序.经过仔细设计的类层次结构是重用代码的基础.封装能让程序员不必修改公有接口的代码即可实现程序的移植.多态能使程序员开发出简洁,易懂,易修改的代码.例如:汽车 从继承的角度看,驾驶员都依靠继承性来驾驶不同类型(子类)的汽车,无论这辆车是轿车还是卡车,是奔驰牌还是菲亚特牌,驾驶员都能找到方向盘,手刹,换档器.经过一段时间驾驶后,都能知道手动档与自动档之间的差别,因为他们实际上都知道这两者的共同超类:传动装置. 从封装的角度看,驾驶员总是看到封装好的特性.刹车隐藏了许多复杂性,其外观如此简单,用脚就能操作它.发动机,手刹,轮胎大小的实现对与刹车类的定义没有影响. 从多态的角度看,刹车系统有正锁反锁之分,驾驶员只用脚踩刹车停车,同样的接口可以用来控制若干种不同的实现(正锁或反锁). 这样各个独立的构件才被转换为汽车这个对象的.同样,通过使用面向对象的设计原则,程序员可以把一个复杂程序的各个构件组合在一起,形成一个一致,健壮,可维护的程序
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁采用封装及反射原理封装一个将对象装换为对数据库操作的工具类
package project02_Order_management.
import java.lang.reflect.F
import java.lang.reflect.InvocationTargetE
import java.lang.reflect.M
import java.sql.C
import java.sql.PreparedS
import java.sql.ResultS
import java.sql.SQLE
import java.util.ArrayL
import java.util.L
public class BaseDao {
* 查询所有数据方法
public static List findAll(Object obj, Connection conn) throws Exception {
// 获取要操作对象的类
Class clazz = obj.getClass();
// 获取传入实体的所有方法;
Method[] methods = clazz.getDeclaredMethods();
// 获取传入实体中的所有的属性
Field[] fields = clazz.getDeclaredFields();
// 建立结果集List接收对象
List list = new ArrayList();
// 创建查询的sql语句;
String sql = &select * from
+ obj.getClass().getSimpleName().toLowerCase();
System.out.println(sql);
// System.out.println(sql);
// 预编译sql语句
PreparedStatement preparedStatement = conn.prepareStatement(sql);
ResultSet resultSet = preparedStatement.executeQuery();
// 从结果集中循环取出放入结果集List
while (resultSet.next()) {
// 查询的结果的接受对象
Object entity = clazz.newInstance();
// 循环类中的属性,进行复制操作
for (int i = 0; i & fields. i++) {
// 获取属性名称
String fieldName = fields[i].getName();
// 获取result结果集中的每个结果字段的对象
Object fieldObject = resultSet.getObject(i + 1);
if (fieldObject == null) {
fieldObject = &null&;// 防止数据为null时引发空指针异常
for (int j = 0; j & methods. j++) {
// 比对属性名加上set后与方法名是否一致,进行对应的属性用对应的方法进行复制操作
if ((&set& + fieldName).equalsIgnoreCase(methods[j]
.getName())) {
// 执行传入对象的指定的方法
methods[j].invoke(entity,
resultSet.getObject(fieldName));
list.add(entity);
* 根据id查询数据
* @throws SQLException
* @throws IllegalAccessException
* @throws InstantiationException
* @throws InvocationTargetException
* @throws IllegalArgumentException
public static Object findById(Object obj, Integer id, Connection conn)
throws SQLException, InstantiationException,
IllegalAccessException, IllegalArgumentException,
InvocationTargetException {
// 获取要操作对象的类
Class clazz = obj.getClass();
// 获取传入实体的所有方法;
Method[] methods = clazz.getDeclaredMethods();
// 获取传入实体中的所有的属性
Field[] fields = clazz.getDeclaredFields();
// 查询的结果的接受对象
Object entity =
// 创建查询的sql语句;
String sql = &select * from & + clazz.getSimpleName().toLowerCase()
+ & where id=?&;
PreparedStatement preparedStatement = conn.prepareStatement(sql);
preparedStatement.setInt(1, id);
ResultSet resultSet = preparedStatement.executeQuery();
if (resultSet.next()) {
// 根据获取的实体的类,创建实体
entity = clazz.newInstance();
// 循环类中的属性,进行复制操作
for (int i = 0; i & fields. i++) {
// 获取属性名称
String fieldName = fields[i].getName();
// 获取result结果集中的每个结果字段的对象
Object fieldObject = resultSet.getObject(i + 1);
if (fieldObject == null) {
fieldObject = &null&;// 防止数据为null时引发空指针异常
for (int j = 0; j & methods. j++) {
// 比对属性名加上set后与方法名是否一致,进行对应的属性用对应的方法进行复制操作
if ((&set& + fieldName).equalsIgnoreCase(methods[j]
.getName())) {
// 执行传入对象的指定的方法
methods[j].invoke(entity,
resultSet.getObject(fieldName));
* 分页数据查询
* @param obj
传入目标对象
* @param conn
* @param startRow
传入开始的行数
* @param endRow
传入结束的行数
public static List paging(Object obj, Connection conn, Integer startRow,
Integer endRow) {
* 保存方法
public static void save(Object obj, Connection conn)
throws IllegalAccessException, IllegalArgumentException,
InvocationTargetException, SQLException {
Class clazz = obj.getClass();
Method[] methods = clazz.getDeclaredMethods();
Field[] fields = clazz.getDeclaredFields();
// 获取操作的表单名字,[这里类名必须和表名一致]
String table = clazz.getSimpleName().toLowerCase();
String fieldsName = &&;
for (int i = 0; i & fields. i++) {
fieldsName = fieldsName + fields[i].getName() + &,&;
fieldsName = fieldsName.substring(0, fieldsName.length() - 1);
// 占位符的设置
String placeholder = &&;
for (int j = 0; j & fields. j++) {
// 拼接属性的get的方法名
String str = &get& + fields[j].getName();
for (int k = 0; k & methods. k++) {
if (str.equalsIgnoreCase(methods[k].getName())) {
placeholder = placeholder + &?& + &,&;
placeholder = placeholder.substring(0, placeholder.length() - 1);
// 拼接sql语句
String sql = &insert into & + table + &(& + fieldsName + &)&
+ & values & + &(& + placeholder + &)&;
System.out.println(sql);
PreparedStatement pst = conn.prepareStatement(sql);
int index = 1;
for (int j = 0; j & fields. j++) {
String str = &get& + fields[j].getName();
// 循环方法名比对
for (int k = 0; k & methods. k++) {
// 如果当前的属性拼出的get方法名,与方法明集合中的有一样的执行
if (str.equalsIgnoreCase(methods[k].getName())) {
// 接收指定的方法执行后的数据
Object p = methods[k].invoke(obj);
// 为指定的占位符进行赋值
pst.setObject(index++, p);
// 执行已经加载的sql语句
pst.executeUpdate();
* 更新数据
public static void update(Object obj, Connection conn) throws Exception {
Class clazz = obj.getClass();
Method[] methods = clazz.getDeclaredMethods();
Field[] fields = clazz.getDeclaredFields();
String table = clazz.getSimpleName().toLowerCase();
String setField = &&;
int id = 1;
for (int i = 0; i & fields. i++) {
for (int j = 0; j & methods. j++) {
String strGetField = &get& + fields[i].getName();
if (strGetField.equalsIgnoreCase(methods[j].getName())) {
* 拼接sql语句中的set字段,并用占位符
setField = setField + fields[i].getName() + &= ?,&;
if (&getId&.equalsIgnoreCase(methods[j].getName())) {
id = Integer
.parseInt(methods[j].invoke(obj).toString());
setField = setField.substring(0, setField.length() - 1);
String sql = &update & + table + & set & + setField + & where id= ?&;
System.out.println(sql);
PreparedStatement pst = conn.prepareStatement(sql);
int index = 1;
for (int j = 0; j & fields. j++) {
String str = &get& + fields[j].getName();
// 循环方法名比对
for (int k = 0; k & methods. k++) {
// 如果当前的属性拼出的get方法名,与方法明集合中的有一样的执行
if (str.equalsIgnoreCase(methods[k].getName())) {
// 接收指定的方法执行后的数据
Object p = methods[k].invoke(obj);
// 为指定的占位符进行赋值
pst.setObject(index++, p);
pst.setObject(index++, id);
pst.execute();
* 根据id删除数据
* @throws SQLException
public static void delById(Object obj, Integer id, Connection conn)
throws SQLException {
System.out.println(&=============&);
Class clazz = obj.getClass();
String table = clazz.getSimpleName().toLowerCase();
String sql = &delete from & + table + & where id=?&;
System.out.println(sql);
PreparedStatement preparedStatement = conn.prepareStatement(sql);
preparedStatement.setInt(1, id);
preparedStatement.execute();
注:类名必须与表名一致,不区分大小写;
您对本文章有什么意见或着疑问吗?请到您的关注和建议是我们前行的参考和动力&&
您的浏览器不支持嵌入式框架,或者当前配置为不显示嵌入式框架。

我要回帖

更多关于 extjs 销毁对象 的文章

 

随机推荐