类的设计与封装(一)实验报告
- 格式:doc
- 大小:59.50 KB
- 文档页数:9
java封装实验报告总结一、实验目的本次实验的主要目的是理解并掌握Java语言中的封装特性,通过实际操作和代码编写,深入理解面向对象编程的基本思想。
二、实验原理封装是面向对象的三大特性之一,其主要思想是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问。
如果需要访问这些信息,必须通过该类提供的公共接口进行访问。
这样可以保证对象的安全性,同时也能提高代码的可维护性和复用性。
三、实验步骤1. 定义一个类,如Person类,包含姓名、年龄等属性。
2. 在Person类中定义getter和setter方法,用于获取和设置属性值。
3. 在主函数中创建Person类的对象,并通过getter和setter方法访问和修改对象的属性。
四、实验代码```javapublic class Person {private String name;private int age;public String getName() {return name;}public void setName(String name) { = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}public class Main {public static void main(String[] args) {Person person = new Person();person.setName("Tom");person.setAge(20);System.out.println(person.getName());System.out.println(person.getAge());}}```五、实验结果与分析运行上述代码,输出为"Tom"和"20",说明我们成功地通过getter和setter方法访问和修改了对象的属性。
一、实验目的1. 了解元件封装的基本概念、分类和作用。
2. 掌握常用元件封装的识别方法和尺寸参数。
3. 学会使用电子设计软件进行元件封装的创建和编辑。
4. 提高实际应用中元件封装的选用能力。
二、实验原理元件封装是指在电路板设计中,将电子元件的引脚与电路板上的焊盘相对应的一种形式。
元件封装主要分为有铅封装和无铅封装两大类。
有铅封装的元件具有成本低、焊接性能好等优点,但存在环境污染问题。
无铅封装的元件符合环保要求,但焊接难度较大。
元件封装的尺寸参数主要包括长度、宽度、高度、焊盘间距、引脚数量等。
这些参数对于电路板的设计和焊接质量具有重要影响。
三、实验器材1. 电子设计软件(如Altium Designer、Eagle等)。
2. 元件库(如Altium Designer元件库、Eagle元件库等)。
3. 电子元件实物(如电阻、电容、晶体管等)。
4. 电路板焊接工具(如烙铁、焊锡、助焊剂等)。
四、实验内容1. 元件封装的识别(1)观察元件实物,了解其外形尺寸和引脚排列方式。
(2)查阅元件手册或相关资料,确定元件封装类型和尺寸参数。
(3)使用电子设计软件的元件库,查找对应的元件封装。
2. 元件封装的创建和编辑(1)打开电子设计软件,创建一个新的项目。
(2)在元件库中查找所需元件的封装,将其拖拽到电路板设计中。
(3)根据实际需求,对元件封装进行编辑,如调整焊盘间距、修改引脚名称等。
(4)保存编辑后的元件封装。
3. 元件封装的选用(1)根据电路板的设计要求和元件尺寸,选择合适的元件封装。
(2)考虑焊接工艺和成本,合理选用有铅封装或无铅封装。
(3)在电子设计软件中,对元件封装进行布局和布线。
4. 元件封装的焊接(1)将电路板放置在焊接台上,预热烙铁。
(2)按照电路图,将元件焊接在对应的焊盘上。
(3)使用助焊剂提高焊接质量。
(4)检查焊接效果,确保元件焊接牢固。
五、实验结果与分析1. 通过实验,掌握了元件封装的基本概念、分类和作用。
java实验报告总结_java总结范文
实验报告总结
通过本次实验,我对Java语言的基本语法和面向对象的编程思想有了更深入的了解。
在实验过程中,我学会了如何定义类和对象,以及如何使用封装、继承和多态等特性来进
行编程。
在实验一中,我通过编写一个简单的Java程序,熟悉了Java的基本语法和标准输入
输出的操作。
我了解了Java的数据类型和运算符,并能够使用if语句和循环结构来实现
程序逻辑。
通过这个实验,我掌握了基本的程序设计能力。
在实验二中,我学习了面向对象的编程思想,并通过编写一个学生管理系统来实践。
我定义了一个Student类,使用封装来隐藏内部细节,并定义了一些方法来实现对学生对
象的操作。
我还使用继承来创建了一个Teacher类,体会到了面向对象编程中的继承和多
态的概念。
通过这个实验,我进一步提高了程序设计的能力。
在实验三中,我学习了异常处理的方法,并通过编写一个简单的图书管理系统来实践。
在程序中,我使用try-catch语句来捕获和处理异常,保证程序的健壮性。
通过这个实验,我对异常处理有了更深入的理解。
在实验四中,我学习了Java中的线程编程,并通过编写一个简单的多线程程序来实践。
在程序中,我使用了Thread类和Runnable接口来创建线程,并学会了如何控制线程的执
行顺序和共享数据。
通过这个实验,我对多线程编程有了初步的了解。
通过这些实验,我对Java语言有了更深入的了解,并提高了自己的编程能力。
在今后的学习和工作中,我将继续学习和实践,提高自己的编程水平。
XX大学C++上机实验报告(一)学院:XX学院班级:XXX姓名:XXX学号:*******指导老师:XXX日期:年月日实验三类的定义和使用一.实验目的1.掌握类的概念、类的定义格式、类与结构的关系、类的成员属性和类的封装性;2.掌握类对象的定义;3.理解类的成员的访问控制的含义,公有、私有和保护成员的区别;4.掌握构造函数和析构函数的含义与作用、定义方式和实现,能够根据要求正确定义和重载构造函数。
能够根据给定的要求定义类并实现类的成员函数;5.掌握友元函数的含义,友元函数和成员函数的区别。
二.实验内容及要求1、定义一个圆类,计算圆的面积和周长。
要求:分别用成员函数和友元函数来求圆的面积和周长。
2、定义一个学生类,其中有3个数据成员有学号、姓名、年龄,以及若干成员函数。
同时编写主函数使用这个类,实现对学生数据的赋值和输出。
要求:1)使用成员函数实现对输出的输入、输出;2)使用构造函数和析构函数实现对数据的输入、输出。
3、定义日期类型Date。
要求有以下面成员:1)可以设置日期;2)日期加一天操作;3)输入函数,输入格式为“XXXX年XX月XX日”。
三.实验要求1)写出程序,并调试程序,要给出测试数据和实验结果。
2)整理上机步骤,总结经验和体会。
3)完成实验日志和上交程序。
四.算法思想1.圆类程序中,用Circle构造函数和Length友元函数分别计算圆的的面积和周长。
再通过主函数调用:Date d;cout<<"请输入圆半径r:";cin>>m;Circle p(m);Length(p);实现输入半径r并输出相关计算值。
2.学生类根据要求分别用构造函数Student(double n,int o,char c[50])和析构函数~Student(),实现学生信息的录入与输出。
于是,当在主程序中,定义学生类Student s(n,o,c)是调用构造函数录入信息,所在作用范围结束时,系统会自动调用析构函数输出信息。
《面向对象程序设计》课程设计实验报告指导教师小组成员:专业班级: 2010级计算机科学与技术专业开设时间:2011-2012(一)目录1.任务1 (2)1.1 任务介绍 (2)1.2 小组成员任务分配 (2)1.3.1设计思想及主要流程图 (2)1.3.1主要程序清单 (2)1.3.1 运行结果及分析 (4)1.3.2设计思想及主要流程图 (2)1.3.2主要程序清单 (2)1.3.2 运行结果及分析 (4)1.3.3设计思想及主要流程图 (2)1.3.3主要程序清单 (2)1.3.3 运行结果及分析 (4)2.任务2 (2)2.1 任务介绍 (2)2.2 小组成员任务分配 (2)2.3设计思想及主要流程图 (2)2.3主要程序清单 (2)2.3 运行结果及分析 (4)3收获、体会和建议 (4)任务1.按照要求设计类 1.根据输出设计类设计类就是根据数据封装的要求,抽象出适合的类。
有如下测试程序和测试程序的输出结果,要求设计类Welcome 。
void main() { Welcome we; Welcome you(we); you.Display();you.Set(“Thank you.”);cout<<you.Get()<<endl; you.talk(); you.Display();}测试程序的输出结果如右: 设计类Welcome 的原则 1)在头文件Cpp1.h 中声明类 2)在Cpp1.cpp 中实现类3)使用内联函数定义Display()函数2.使用类改写程序编写一个求方程02=++c bx ax 的根的程序,用三个函数分别求当ac b 42+大于零、等于零和小于零时方程的根。
要求从主函数输入a 、b 、c 的值并输出结果。
使用面向过程的解法一般是把变量设为double 型,适用库函数cmath 进行计算。
请注意:使用面向对象的方法解决这个问题,首先要从解一元二次方程出发,抽象一个代表一元二次方程的类。
实验一熟悉Java开发环境(验证性2学时)一、实验目的与要求:1 掌握Java Application程序的开发过程并编写第一个Java Application程序*2 掌握Java Applet程序的开发过程并编写第一个Java Applet程序。
*3 练习简单的HTML文件配合Java Applet使用。
4 熟悉jdk的使用二、实验内容:1 编写一个Java Application程序,在屏幕上显示”This is my first java program!”.*2 编写第一个Java Applet 程序,在屏幕上显示”This is my first Java Applet!”三、实验步骤:1、jdk的使用jdk开发工具包可以从网站下载,jdk不是集成编译环境,须手动运用命令行程序进行编译和解释执行1)编辑.java文件可以在记事本或其他纯文本编辑器中编辑,保存时把文件扩展名定为.java即可,当然要注意文件名命名的要求2)编译生成.class文件进入dos系统进行编译(如图1.1所示),格式如javac MyFirstApplication.java,要注意图1.1进入命令行看javac.exe的路径并且MyFirstApplication.java文件路径和javac.exe路径一样。
编译成功后就能在浏览器中看见多了一个MyFirsApplication.class或更多的.class文件。
如图1.2所示图1.2使用jdk编译MyFirstApplication.java文件3)解释执行Application程序:同样是在dos系统下解释执行,格式如java MyFirstApplication,注意.class后缀别加,如图1.3所示。
图1.3解释执行MyFirstApplication.class程序* applet程序进入dos系统进行编译,格式如javac MyFirstApplet.java,要注意看javac.exe的路径并且MyFirstApplet.java文件路径和javac.exe路径一样。
一、实验目的1. 掌握Altium Designer软件中元件封装的绘制方法。
2. 熟悉元件封装的属性设置及修改。
3. 学会导入和使用自定义元件封装。
二、实验环境1. 软件:Altium Designer2. 硬件:计算机三、实验内容1. 新建元件封装库2. 绘制元件封装3. 设置元件封装属性4. 导入和使用自定义元件封装四、实验步骤1. 新建元件封装库(1)打开Altium Designer软件,选择“File”菜单中的“New”选项,然后选择“Library Package”。
(2)在弹出的对话框中,输入库文件名,例如“my_footprints”,点击“OK”按钮。
(3)在新建的库文件中,可以看到两个文件:元件原理图文件和元件封装文件。
2. 绘制元件封装(1)打开元件封装文件,选择“Place”菜单中的“Pad”命令,开始绘制焊盘。
(2)根据元件实际尺寸,设置焊盘的尺寸、形状和间距。
(3)绘制完焊盘后,继续绘制元件的其他部分,如引脚、标记等。
3. 设置元件封装属性(1)选中绘制的元件封装,点击“Properties”按钮,打开属性设置窗口。
(2)在属性设置窗口中,设置元件封装的名称、编号、描述等信息。
(3)设置焊盘的电气属性,如焊盘类型、热阻、电气类型等。
4. 导入和使用自定义元件封装(1)在PCB设计环境中,选择“Library”菜单中的“Manage Libraries”命令,打开库管理窗口。
(2)在库管理窗口中,点击“Add/Remove”按钮,选择刚才创建的元件封装库文件,点击“OK”按钮。
(3)在PCB设计环境中,选择“Place”菜单中的“Component”命令,在弹出的对话框中,选择刚才创建的元件封装,点击“OK”按钮。
(4)将元件放置到PCB设计区域,进行布局和布线。
五、实验结果与分析1. 成功绘制了元件封装,并设置了相关属性。
2. 在PCB设计环境中,成功导入并使用了自定义元件封装。
浙江理工大学信息学院面向对象程序设计实验报告实验名称:类的定义与使用学时安排:3实验类别:设计性实验实验要求:1人1组姓名:邵旸珂学号:2016329621068 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄一、实验目的1)掌握类的概念、类的定义格式、类与结构的关系、类的成员属性和类的封装性;2)掌握类对象的定义;3)理解类的成员的访问控制的含义,公有、私有和保护成员的区别;4)掌握构造函数和析构函数的含义与作用、定义方式和实现,能够根据要求正确定义和重载构造函数。
能够根据给定的要求定义类并实现类的成员函数;二、实验原理介绍通过建立类及对象,用类的成员函数和对象访问类的成员;利用建立类的构造函数,完成类的成员的初始化工作;三、实验设备介绍软件需求: windows或linux下的c++编译器硬件需求: 对于硬件方面的要求,建议配置是Pentium III 450以上的CPU处理器,64MB以上的内存,200MB的自由硬盘空间、CD-ROM驱动器、能支持24位真彩色的显示卡、彩色显示器、打印机。
四、实验内容编写一个程序,模拟电梯的功能。
功能接口包括电梯上行按钮、下行按钮、楼层选择和电梯在行驶过程中的楼层显示。
要求:1.由用户选择按上行按钮还是下行按钮,选择操作后再由用户输入要进入的楼层,进而电梯开始运行,显示所到的每一楼层层数。
2.如果是上行,则选择输入的楼层号不能比当前楼层号小,否则应给出不合法提示。
3. 如果是下行,则选择输入的楼层号不能比当前楼层号大,否则应给出不合法提示。
4.电梯一旦开始运作就会始终运行,直到窗口关闭。
5.电梯在经过不同楼层时,最好每个楼层的显示之间能有延迟,最终停靠的楼层的输出形式能更加醒目。
如果可以,在电梯最初开始运行时,能在电梯由内部显示当前日期(提示:实现这些功能时,需要调用系统api,实现时间显示功能可以使用CDate类)。
五程序清单#include <iostream>#include <ctime>#include <windows.h>using namespace std;int n,floorNumber;class Elevator{private:int floor; //电梯总的楼层数bool up; //是否上行,bool为布尔类型,可取值true或falsebool down; //是否下行int currentFloor; //当前所在楼层public:Elevator(int floor);void setUpButton(); //按下上行按钮void setDownButton(); //按下下行按钮void setFloorNumber(int floorNumber); //根据要进入的楼层电梯开始运行,并逐层显示经过的楼层int getCurrentFloor();//获得当前所在楼层void charge();int choice();};Elevator::Elevator(int f){floor =f;up=false;down=false;currentFloor=1;};void Elevator::setUpButton(){if(currentFloor>floorNumber){SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_IN TENSITY|FOREGROUND_RED|FOREGROUND_GREEN);cout<<"您不能上行!"<<endl<<endl;}else if(floorNumber>floor){SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_IN TENSITY|FOREGROUND_RED|FOREGROUND_GREEN);cout<<"没这一层!太高啦!您想上天?!"<<endl<<endl;}else up=true;}void Elevator::setDownButton(){if(currentFloor<floorNumber){SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_IN TENSITY|FOREGROUND_RED|FOREGROUND_GREEN);cout<<"您不能下行!"<<endl<<endl;}else if(floorNumber<1){SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_IN TENSITY|FOREGROUND_RED|FOREGROUND_GREEN);cout<<"没这一层!太低啦!您想入地?!"<<endl<<endl;}else down=true;}void Elevator::setFloorNumber(int floorNumber){if(up){for(;currentFloor<floorNumber;currentFloor++){ cout<<"--"<<currentFloor<<"--"<<endl;Sleep(2000);}SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_IN TENSITY|FOREGROUND_RED);cout<<"第"<<currentFloor<<"层到了"<<endl<<endl;up=false;}if(down){for(;currentFloor>floorNumber;currentFloor--){ cout<<"--"<<currentFloor<<"--"<<endl;Sleep(2000);}SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_IN TENSITY|FOREGROUND_RED);cout<<"第"<<currentFloor<<"层到了"<<endl<<endl;down=false;}}int Elevator::getCurrentFloor(){return currentFloor;}int Elevator::choice(){cin>>n;if(n==2&&getCurrentFloor()==1){SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);cout<<"您已经在第一层了!除非您自己打洞,不然我是不会带你下去的!"<<endl<<endl;return 0;}switch(n){case 1:cout<<"请输入要进入的楼层"<<endl;cin>>floorNumber;setUpButton();setFloorNumber(floorNumber); break;case 2:cout<<"请输入要进入的楼层"<<endl;cin>>floorNumber;setDownButton();setFloorNumber(floorNumber); break;case 3:return -1;default:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREG ROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);cout<<"只能选上升和下降!您难道还想玩电梯漂移?!"<<endl<<endl; break;}SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);cout<<"当前电梯停在"<<getCurrentFloor()<<"层"<<endl;}void Elevator::charge(){SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_IN TENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);cout<<"---请选择操作---"<<endl;cout<<"| 1.上升 |"<<endl;cout<<"| 2.下降 |"<<endl;cout<<"| 3.退出 |"<<endl;cout<<"|--------------|"<<endl;}int main(){long a;time(&a);int floor;cout<<"告诉我总共有几层"<<endl;cin>>floor;Elevator el(floor);SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_IN TENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);cout<<ctime(&a)<<endl;cout<<"本电梯共"<<floor<<"层,欢迎您的使用"<<endl<<endl;while(1){int i=0;el.charge();i=el.choice();if(i==-1) break;}return 0;}六运行结果七实验心得实验很有趣,让我初步体会了程序猿的感受。
led封装实验报告LED封装实验报告引言:近年来,随着科技的飞速发展,LED(Light Emitting Diode)作为一种新型的照明装置,逐渐在各个领域得到广泛应用。
本实验旨在通过对LED封装过程的研究与实践,探究其原理和技术,并对其性能进行评估。
一、实验目的本实验的主要目的是研究LED封装过程中的关键技术和参数,探究其对LED性能的影响,并通过实验数据分析和对比,评估不同封装工艺对LED性能的影响。
二、实验原理LED封装是将LED芯片与外部环境隔离,并提供电气连接和机械保护的过程。
封装过程中的关键技术包括芯片粘合、导线焊接、封装胶固化等。
不同的封装工艺和材料选择会对LED的光电性能产生重要影响。
三、实验步骤1. 芯片粘合:将LED芯片粘贴在导电胶水上,确保芯片与基板之间的良好接触。
2. 导线焊接:将导线焊接到芯片的金属引脚上,以实现电气连接。
3. 封装胶固化:使用特定的封装胶固化装置,对封装胶进行固化,以提供机械保护和光学性能。
四、实验结果与分析通过实验数据的记录和分析,我们可以得出以下结论:1. 不同的芯片粘合技术会对LED的热导性能产生影响,影响LED的散热效果。
2. 导线焊接的质量直接影响LED的电气连接性能,焊接不良会导致电流传输不畅,影响LED的亮度和稳定性。
3. 封装胶的固化时间和温度对LED的机械保护和光学性能有重要影响,过长或过短的固化时间都会影响LED的稳定性和寿命。
五、实验总结通过本次实验,我们深入了解了LED封装的原理和技术,了解了不同封装工艺对LED性能的影响。
同时,我们也认识到在实际应用中,除了封装过程本身,LED的性能还受到其他因素的影响,如芯片质量、散热设计等。
因此,在实际应用中,需要综合考虑多个因素,以实现最佳的LED性能。
六、展望随着科技的不断进步,LED封装技术也将不断创新和完善。
未来,我们可以进一步研究和探索LED封装过程中的新材料、新工艺和新技术,以提高LED的光电性能和应用范围。
[实验报告]类和对象
一、实验目的
通过本次实验,了解抽象的一种程序设计概念“类”和“对象”,理解类之间的继承与多态性,以及封装对对象的各种属性和行为,实现软件对象模型与真实世界对象间的映射。
二、实验内容
1.定义类与对象
(1)类是代表一类实体的抽象。
它包含了一个共同拥有的结构和行为。
类是面向对象程序设计的基本元素。
(2)对象是一个实例。
它拥有一个特定于其类型的属性,并表现出对应的行为。
对象是程序中实际的可操作的元素。
2.类的成员
(1)类的成员可以是变量,函数,常量等等。
(2)变量:类的成员变量可以存储数据成员和提供给类的方法,这些变量被称为实例变量;类变量存储类及其对象的信息。
(3)函数:类的成员函数用于封装一定的行为或对对象的设置,它可以访问实例变量和类变量的值,以及实现一定的功能。
多态性是指一个类可以根据不同环境要求而采用不同的行为。
接口就是把数据和逻辑封装在一起的内部接口。
半导体照明器件设计封装与测试实验报告半导体照明器件设计、封装与测试实验报告一、实验名称:实验4光照特性实验2。
实验目的1.了解半导体照明器件的照明特性;2.学习半导体照明器件照明特性的测试原理;3.掌握半导体照明器件照明特性的测试方法。
三、实验原理1.LED光、色、电测试中涉及的主要参数有:(1)电气特性led基础结构为p-n结,故主要关注其正向电压电流关系,以及反向击穿电压值。
当电压小到足以克服势垒电场时,通过LED的电流非常小。
当正向电压超过死区电压时,电流和电压迅速增加。
正向工作电流指LED正常发光时的正向电流值。
根据不同管的结构和输出功率,它在几十毫安到1安培之间。
在led两端加反向电压,只有微安级的反向电流。
反向电压超过击穿电压后,管子被击穿损坏。
为安全起见,激励电源提供的最大反向电压应低于击穿电压。
(2)光电特性光强是描述LED光度特性的最重要参数。
它表示光源在指定方向上以单位立体角发射的光通量。
在不同的空间角度下,LED将显示不同的光强度。
led光源发射的辐射通量中能引起人眼视觉的那部分,称为光通量,单位是流明,与辐射通量的概念类似,它是led光源向整个空间在单位时间内发射的能引起人眼视觉的辐射通量。
积分球测量光通量。
积分球是一个球形腔体,由内壁有均匀白色漫反射层的球壳组装而成,被测LED置于腔体中。
LED器件发出的光辐射被积分球壁多次反射,使整个球壁上的照明均匀分布。
这可以通过放置在球形壁上的探测器来测量与光通量成比例的光的照度。
(3)led输出光空间分布特性LED的芯片、结构和封装方式不同,输出光的空间分布也相同。
当方向角改变时,发射强度也随之改变。
当发射强度下降到峰值的一半时,相应的角度称为方向半值角。
(4)比色法在色度研究中,常使用分光光谱测量法。
在分光光谱法测量色度系统中,光谱仪是重要的组成部分,使用具有光谱分辨率高的光栅光谱仪等进行色度测量。
可调恒流源与led连接,用电流调节旋钮调节输出电流使led正常工作。
实验二面向对象编程实验报告一、实验目的本次实验旨在深入理解和掌握面向对象编程的基本概念和方法,通过实际编程操作,提高运用面向对象思想解决问题的能力,熟悉面向对象编程的开发流程和技巧,培养良好的编程习惯和代码规范。
二、实验环境本次实验使用的编程环境为具体编程环境名称及版本,操作系统为操作系统名称及版本。
三、实验内容(一)问题描述设计一个简单的学生管理系统,能够实现对学生信息(包括姓名、学号、年龄、成绩等)的录入、查询、修改和删除操作。
(二)类的设计1、设计一个`Student` 类,用于表示学生对象。
该类包含以下属性:`name`(姓名)、`student_id`(学号)、`age`(年龄)、`score`(成绩)。
2、为`Student` 类添加构造函数,用于初始化学生对象的属性。
3、为`Student` 类添加`get` 和`set` 方法,用于获取和设置学生对象的属性值。
(三)功能实现1、录入功能:实现用户输入学生信息,并创建`Student` 对象进行存储。
2、查询功能:根据学号或姓名查询学生信息,并输出查询结果。
3、修改功能:根据学号或姓名找到对应的学生对象,修改其属性值。
4、删除功能:根据学号或姓名删除对应的学生对象。
四、实验步骤(一)类的实现```javapublic class Student {private String name;private String studentId;private int age;private double score;public Student(String name, String studentId, int age, double score) {thisname = name;thisstudentId = studentId;thisage = age;thisscore = score;}public String getName(){return name;}public void setName(String name) {thisname = name;}public String getStudentId(){return studentId;}public void setStudentId(String studentId) {thisstudentId = studentId;}public int getAge(){return age;}public void setAge(int age) {thisage = age;}public double getScore(){return score;}public void setScore(double score) {thisscore = score;}}```(二)主函数实现```javaimport javautilArrayList;import javautilScanner;public class StudentManagementSystem {private ArrayList<Student> students;public StudentManagementSystem(){students = new ArrayList<>();}public static void main(String args) {StudentManagementSystem system = new StudentManagementSystem();Scanner scanner = new Scanner(Systemin);while (true) {Systemoutprintln("1、录入学生信息");Systemoutprintln("2、查询学生信息");Systemoutprintln("3、修改学生信息");Systemoutprintln("4、删除学生信息");Systemoutprintln("5、退出系统");int choice = scannernextInt();switch (choice) {case 1:systemaddStudent(scanner);break;case 2:systemqueryStudent(scanner);break;case 3:systemmodifyStudent(scanner);break;case 4:systemdeleteStudent(scanner);break;case 5:Systemoutprintln("感谢使用,再见!");Systemexit(0);default:Systemoutprintln("输入有误,请重新输入!");}}}//录入学生信息public void addStudent(Scanner scanner) {Systemoutprintln("请输入学生姓名:");String name = scannernext();Systemoutprintln("请输入学生学号:");String studentId = scannernext();Systemoutprintln("请输入学生年龄:");int age = scannernextInt();Systemoutprintln("请输入学生成绩:");double score = scannernextDouble();Student student = new Student(name, studentId, age, score);studentsadd(student);Systemoutprintln("学生信息录入成功!");}//查询学生信息public void queryStudent(Scanner scanner) {Systemoutprintln("请输入查询方式(1、按学号查询 2、按姓名查询):");int queryType = scannernextInt();if (queryType == 1) {Systemoutprintln("请输入学号:");String studentId = scannernext();for (Student student : students) {if (studentgetStudentId()equals(studentId)){Systemoutprintln("姓名:"+ studentgetName());Systemoutprintln("学号:"+ studentgetStudentId());Systemoutprintln("年龄:"+ studentgetAge());Systemoutprintln("成绩:"+ studentgetScore());return;}}Systemoutprintln("未找到该学号对应的学生信息!");} else if (queryType == 2) {Systemoutprintln("请输入姓名:");String name = scannernext();for (Student student : students) {if (studentgetName()equals(name)){Systemoutprintln("姓名:"+ studentgetName());Systemoutprintln("学号:"+ studentgetStudentId());Systemoutprintln("年龄:"+ studentgetAge());Systemoutprintln("成绩:"+ studentgetScore());return;}}Systemoutprintln("未找到该姓名对应的学生信息!");} else {Systemoutprintln("输入有误,请重新输入!");}}//修改学生信息public void modifyStudent(Scanner scanner) {Systemoutprintln("请输入修改方式(1、按学号修改 2、按姓名修改):");int modifyType = scannernextInt();if (modifyType == 1) {Systemoutprintln("请输入学号:");String studentId = scannernext();for (Student student : students) {if (studentgetStudentId()equals(studentId)){Systemoutprintln("请输入新姓名:");String newName = scannernext();Systemoutprintln("请输入新年龄:");int newAge = scannernextInt();Systemoutprintln("请输入新成绩:");double newScore = scannernextDouble();studentsetName(newName);studentsetAge(newAge);studentsetScore(newScore);Systemoutprintln("学生信息修改成功!");return;}}Systemoutprintln("未找到该学号对应的学生信息!");} else if (modifyType == 2) {Systemoutprintln("请输入姓名:");String name = scannernext();for (Student student : students) {if (studentgetName()equals(name)){Systemoutprintln("请输入新学号:");String newStudentId = scannernext();Systemoutprintln("请输入新年龄:");int newAge = scannernextInt();Systemoutprintln("请输入新成绩:");double newScore = scannernextDouble();studentsetStudentId(newStudentId);studentsetAge(newAge);studentsetScore(newScore);Systemoutprintln("学生信息修改成功!");return;}}Systemoutprintln("未找到该姓名对应的学生信息!");} else {Systemoutprintln("输入有误,请重新输入!");}}//删除学生信息public void deleteStudent(Scanner scanner) {Systemoutprintln("请输入删除方式(1、按学号删除 2、按姓名删除):");int deleteType = scannernextInt();if (deleteType == 1) {Systemoutprintln("请输入学号:");String studentId = scannernext();for (Student student : students) {if (studentgetStudentId()equals(studentId)){studentsremove(student);Systemoutprintln("学生信息删除成功!");return;}}Systemoutprintln("未找到该学号对应的学生信息!");} else if (deleteType == 2) {Systemoutprintln("请输入姓名:");String name = scannernext();for (Student student : students) {if (studentgetName()equals(name)){studentsremove(student);Systemoutprintln("学生信息删除成功!");return;}}Systemoutprintln("未找到该姓名对应的学生信息!");} else {Systemoutprintln("输入有误,请重新输入!");}}}```五、实验结果通过对程序的运行和测试,能够成功实现学生信息的录入、查询、修改和删除功能。
实验报告课程名称 Java技术专业班级 13-计算机科学与技术-1班学生姓名及学号 98 潘汀指导教师钟华刚实验地点计算中心2015 ~ 2016 学年第一学期实验一类的封装、继承、多态一、实验目的1.复习、理解OOP的特征——封装、继承和多态。
2.学会使用Java编写简单的类。
理解类的属性和方法。
3.掌握关键字private, protected, public的作用。
4.掌握多态的概念。
二、实验内容1.分别编写两个类Point2D,Point3D来表示二维空间和三维空间的点,使之满足下列要求:(1) Point2D有两个整型成员变量x, y (分别为二维空间的X,Y方向坐标),Point2D的构造方法要实现对其成员变量x, y的初始化。
(2) Point2D有一个void型成员方法offset(int a, int b),它可以实现Point2D的平移。
(3) Point3D是Point2D的直接子类,它有有三个整型成员变量x,y,z (分别为三维空间的X,Y,Z方向坐标),Point3D有两个构造方法:Point3D(int x,int y,int z)和Point3D(Point2D p,int z),两者均可实现对Point3D的成员变量x, y,z的初始化。
(4) Point3D有一个void型成员方法offset(int a, int b,int c),该方法可以实现Point3D的平移。
(5)在Point3D中的主函数main()中实例化两个Point2D的对象p2d1,p2d2,打印出它们之间的距离,再实例化两个Point3D的对象p3d1,p3d2,打印出他们之间的距离。
提示:方法2.创建一个数组,随机生成Point2D或者Point3D的对象放于其中。
最后依次调用数组中每个对象的“打印方法”,显示数组中存储的对象是什么。
提示:方法或者类三、实验代码四、思考题1.你对面向对象的理解。
UML类图实验报告
类图效果截图
各个类的具体描述:
1.类Borrower
描述了借阅者的信息(学生)。
借阅者信息包括学号、姓名、院系。
这个类代
表了学生在系统中的一个帐户。
2.类Title
描述了图书的标题种类的信息。
对于每种图书,图书馆通常都拥有多本具体的图书。
类Title封装了图书的名称、出版社名、作者和ISBN号等信息。
3.类Book
代表馆内的藏书。
Book对象有两种状态,借出和未借出,并且每一个Book 对象与一个Title对象相对应。
4.类Loan
描述了借阅者从图书馆借阅图书时的借阅记录。
一个Loan对象对应一个借阅者Borrower对象和一本图书Book对象。
当返还一本图书时,将删除借阅记录。
5.类Manager
保存了用户名和密码信息,并且派生了两个类,图书管理员类Librarian和系统管理员类SystemManager。
6.抽象类Persistent
上面所有类的父类,该类实现了对数据库的读写、更新、删除等操作。
第1篇一、实验目的1. 了解集成电路封装知识,熟悉集成电路封装类型。
2. 掌握集成电路工艺流程,了解其基本原理。
3. 掌握化学去封装的方法,为后续芯片检测和维修提供技术支持。
二、实验仪器与设备1. 烧杯、镊子、电炉2. 发烟硝酸、浓硫酸、芯片3. 超纯水、防护手套、实验台等三、实验原理与内容1. 传统封装(1)塑料封装:双列直插DIP、单列直插SIP、双列表面安装式封装SOP、四边形扁平封装QFP、具有J型管脚的塑料电极芯片载体PLCC、小外形J引线塑料封装SOJ。
(2)陶瓷封装:具有气密性好、高可靠性或大功率的特点。
2. 集成电路工艺(1)标准双极性工艺(2)CMOS工艺(3)BiCMOS工艺3. 去封装(1)陶瓷封装:一般用刀片划开。
(2)塑料封装:化学方法腐蚀,沸煮。
四、实验步骤1. 打开抽风柜电源,打开抽风柜。
2. 将要去封装的芯片(去掉引脚)放入有柄石英烧杯中。
3. 戴上防护手套,确保实验安全。
4. 将烧杯放入电炉中,加入适量的发烟硝酸,用小火加热20~30分钟。
5. 观察芯片表面变化,待芯片表面出现裂纹后,取出烧杯。
6. 将烧杯放入冷水中冷却,防止芯片损坏。
7. 取出芯片,用镊子轻轻敲打芯片,使封装材料脱落。
8. 清洗芯片,去除残留的化学物质。
9. 完成实验。
五、实验结果与分析1. 实验结果通过本次实验,成功去除了芯片的封装材料,暴露出芯片内部结构,为后续检测和维修提供了便利。
2. 实验分析(1)实验过程中,严格控制了加热时间和温度,避免了芯片损坏。
(2)化学去封装方法操作简便,成本低廉,适用于批量处理。
(3)本次实验成功掌握了化学去封装的基本原理和操作步骤,为后续芯片检测和维修提供了技术支持。
六、实验总结1. 本次实验使我们对集成电路封装知识有了更深入的了解,熟悉了不同封装类型的特点。
2. 掌握了化学去封装的基本原理和操作步骤,为后续芯片检测和维修提供了技术支持。
3. 通过本次实验,提高了我们的实验操作能力和团队协作精神。
ATM实验报告范文一、实验目的本实验主要目的是设计并实现一个简单的自动取款机(ATM)系统,通过该系统,用户可以进行账户查询、存款、取款等基本操作。
通过实验,熟悉面向对象设计的基本思想和方法,进一步理解面向对象的封装、继承和多态等特性。
二、实验设计1.类的设计本实验中设计了如下几个类:ATM、Account、SavingsAccount、CheckingAccount。
其中,ATM类代表自动取款机,Account类是表示银行账户的基类,SavingsAccount类是Account类的派生类,表示储蓄账户,CheckingAccount类也是Account类的派生类,表示支票账户。
2.类的属性和方法Account类具有属性:账户号(accountNumber)、账户余额(balance)和利率(rate),具有方法:构造方法Account(、获取账户号方法getAccountNumber(、存款方法deposit(、取款方法withdrawal(。
SavingsAccount类继承Account类,新增加了属性:利率(rate)和最低余额(minBalance),新增加了方法:构造方法SavingsAccount(、计算利息的方法calculateInterest(。
CheckingAccount类继承Account类,新增加了属性:透支额度(overdraft),新增加了方法:构造方法CheckingAccount(、透支方法overdraft(。
3.系统交互过程用户进入ATM系统后,首先输入账户号码以及密码进行验证。
验证通过后,用户可以进行以下操作:(1) 查询账户余额:调用Account类的getBalance(方法进行查询。
(2) 存款:调用Account类的deposit(方法进行存款操作。
(3) 取款:调用Account类的withdrawal(方法进行取款操作,该方法根据账户类型的不同进行判断,如果是储蓄账户则需满足最低余额要求,如果是支票账户则需满足透支额度。
电路实验报告(8篇)电路实验报告(8篇)电路实验报告1一、实验题目利用类实现阶梯型电阻电路计算二、实验目的利用类改造试验三种构造的计算程序,实现类的封装。
通过这种改造理解类实现数据和功能封装的作用,掌握类的设计与编程。
三、实验原理程序要求用户输入的电势差和电阻总数,并且验证数据的有效性:电势差必须大于0,电阻总数必须大于0小于等于100的偶数。
再要求用户输入每个电阻的电阻值,并且验证电阻值的有效性:必须大于零。
此功能是由类CLadderNetwork的InputParameter ()函数实现的。
且该函数对输入的数据进行临界判断,若所输入数据不满足要求,要重新输入,直到满足要求为止。
本实验构造了两个类,一个CResistance类,封装了电阻的属性和操作,和一个CLadderNetwork类,封装了阶梯型电阻电路的属性和操作。
用户输入的电势差、电阻总数、电阻值,并赋给CladderNetwork的数据,此功能是由类CLadderNetwork的InputParameter 函数实现的。
输出用户输入的电势差、电阻总数、电阻值,以便检查,,此功能是由类CLadderNetwork的PrintEveryPart()函数实现的。
根据用户输入的电势差、电阻总数、电阻值换算出每个电阻上的电压和电流。
此功能是由类CLadderNetwork的Calculate ()函数实现的。
最后输出每个电阻上的电压和电流,此功能是由类CLadderNetwork 的PrintResult()函数实现的'。
此程序很好的体现了面向对象编程的技术:封装性:类的方法和属性都集成在了对象当中。
继承性:可以继承使用已经封装好的类,也可以直接引用。
多态性:本实验未使用到多态性。
安全性:对重要数据不能直接操作,保证数据的安全性。
以下是各个类的说明:class CResistance //电阻类private:double voltage;double resistance;double current;public:void InitParameter(); //初始化数据void SetResist(double r); //设置resistance的值void SetCur(double cur); //设置current的值void SetVol(double vol); //设置voltage的值void CalculateCurrent(); //由电阻的电压和电阻求电流double GetResist(){return resistance;} //获得resistance的值保证数据的安全性double GetCur(){return current;} //获得current的值double GetVol(){return voltage;} //获得voltage的值class CResistance //电阻类{private:CResistance resists[MAX_NUM]; //电阻数组int num;double srcPotential;public:void InitParameter(); //初始化数据void InputParameter(); //输入数据void Calculate(); //计算void PrintEveryPart(); //显示输入的数据以便检查void PrintResult(); //显示结果四、实验结果程序开始界面:错误输入-1(不能小于0)错误输入0 (不能为0)输入正确数据3输入错误数据-1输入错误数据0输入正确数据4同样给电阻输入数据也必须是正数现在一次输入2,2,1,1得到正确结果。
PCB设计实验报告(1)PCB设计实验报告一、实验目的本次实验的目的是学习和掌握PCB设计基础知识和技能,通过设计一个简单的电路板,了解PCB设计步骤和工具使用。
二、实验原理PCB设计是指基于电子电路原理图,通过设计软件将电路原理图制为电路板的过程。
整个PCB设计主要分为原理图设计、封装库设计、布线设计、辅助设计以及输出制图等环节。
三、实验步骤1.电路原理设计根据实验要求,我们需要设计一个简单的NAND逻辑电路。
首先需要通过EDA工具(如Altium Designer等)绘制电路原理图。
2.选型与封装在电路原理图绘制好后,需要在EDA软件库中选择器件封装,或者自己设计器件封装。
挑选合适的封装并进行库设计,以便后续布局设计。
3.布局设计将原理图转化为简单的电路板后,我们需要进行组件布局,以最小化电路板空间,并确保布局和所设计的电路板之间的距离符合设计要求。
在布局过程中还需要注意一些实用规则,如地和电源平面的铺设,布线之间的距离,信号阻抗等。
4.设计验证完成布局之后,我们需要对电路板进行原理图与电路板的一致性验证。
在验证过程中,还需要检查电路板的规格以及冲突。
5.布线设计在绘制初始布局之后,我们需要进行电路布线设计。
通过布线软件完成电路信号线路的设计,选择合适的线径以最小化环路电阻,确保电路板的最佳性能。
6.生成部件完成信号线路布线之后,我们需要生成部件。
对于电路板的制造,我们需要在生成部件后进行飞针测试和自增测试。
通过部件的质量检验和偏差分析,来自动排除制造零件的故障。
7.输出制图生成电路板后需要输出制图,输出所需填充和确定参数,制作详细的文件列表,便于进行电路板制版。
四、实验结果通过以上步骤,最终我们成功设计出了一个简单的电路板,实验结果准确无误,制材完美。
此次实验,不仅让我们对PCB设计有了更深入的了解,同时也提升了我们的实际动手能力和团队协作能力。
五、实验结论本次PCB设计实验通过学习和掌握PCB设计的基础知识和技能,了解了PCB设计步骤和EDA工具的使用。
封装元器件实验报告1. 实验目的本实验旨在掌握封装元器件的基本特性和使用方法,通过实际操作加深对元器件封装过程的理解,提高电路设计的能力。
2. 实验设备与材料- 电路模拟软件:Proteus- Arduino开发板- 电阻、电容、二极管等基本元器件- 手持焊接工具3. 实验步骤3.1 元器件封装的基本原理元器件封装是指将电子元器件与外部环境隔离,并提供外部引脚或连接方式的过程。
常见的元器件封装有插件式封装和表面贴装封装两种。
插件式封装适用于手工焊接,而表面贴装封装适用于自动化生产。
3.2 Proteus软件的使用打开Proteus软件,创建一个新的电路图设计窗口。
在元器件库中选取所需元器件,拖动到设计窗口中,并连接各元器件。
设置元器件的属性、参数和连接方式。
调整元器件的位置和尺寸,使其符合设计要求。
3.3 元器件的加工处理选择合适的元器件封装方式进行加工处理。
对于插件式封装,使用手持焊接工具,进行元器件引脚的插焊和固定。
对于表面贴装封装,使用焊接机器或自动贴片机进行处理。
3.4 测试与调试完成元器件封装后,使用测试仪器对电路进行测试与调试。
检查元器件的连接是否准确、引脚的焊接是否牢固、电路的功能是否正常等。
如有异常情况,进行排除故障。
4. 实验结果与分析经过实验操作,成功封装了几个常见的元器件,如电阻、电容、二极管等。
通过测试仪器的检测,发现元器件连接准确,引脚焊接牢固,电路功能正常。
这些结果说明实验操作的准确性和元器件封装的可靠性。
另外,我们还对不同封装方式进行了对比。
插件式封装适用于手工焊接,对于开发板的原型设计非常方便,但需要一定的焊接技巧。
表面贴装封装适用于大批量生产,可以提高生产效率,但需要专用的设备和环境。
根据需求选择适合的封装方式,可以有效提升工作效率。
5. 实验心得与建议通过本次实验,我对元器件封装的原理和基本操作有了更深入的了解。
掌握了Proteus软件的使用技巧,并对插件式封装和表面贴装封装有了初步的认识。
浙江大学城市学院实验报告课程名称面向对象程序设计实验项目名称类的设计与封装实验(一)学生姓名专业班级学号一. 实验目的和要求1.掌握使用类将对象的属性与功能封装在类中的特点2.掌握实例方法与构造方法二. 实验内容1. 分析Time类的设计2. 分析并设计Product类3. 分析并设计Fraction类4. 设计Rectangle类5. 设计Student类及其测试类School类三. 实验结果与分析(可将程序运行结果截屏,也可分析运行结果)1. 阅读以下关于Time类的代码,分析程序并回答相关的问题import java.text.DecimalFormat;public class Time{private int hour;private int minute;private int second;Time(){hour=0;minute=0;second=0;}Time(int h){ hour=h;minute=0;second=0;}Time(int h,int m){hour=h;minute=m;second=0;}Time(int h,int m,int s){hour=h;minute=m;second=s;}Time(Time time){this.hour=time.getHour();this.minute=time.getMinute();this.second=time.getSecond();}public int getHour(){return hour;}public int getMinute(){ return minute;}public int getSecond(){return second;}public String toUniversalString(){DecimalFormat twoDigits=new DecimalFormat("00");return twoDigits.format(getHour())+":"+twoDigits.format(getMinute())+":"+twoDigits.format(getSecond());}public String toStandardString(){DecimalFormat twoDigits=new DecimalFormat("00");return ((getHour()==12|| getHour()==0)? 12:getHour()%12)+":"+、twoDigits.format(getMinute())+":"+twoDigits.format(getSecond())+(getHour()<12?"AM":"PM");}}(1) Time类共有几个构造器(即构造方法),作用有什么不同?构造方法有5个第一个是不知道hour、minute、second三个的时候初始化时间为0:0:0 第二个是知道hour=h,而不知道minute、second的情况下初始化时间为h:0:0第三个是知道hour=h,minute=m,而second未知,则初始化时间为h:m:0第四个为hour=h,minute=m,second=s,初始化时间为h:m:s(2) getTime(),getMinute(),getSecond()方法的作用是什么?如果去掉这些方法,程序可以完成同样的功能吗?如何修改?分别是返回小时数,分钟数以及秒数,不能,如若删掉,要改成Time(Time time){this.hour=return hour;this.minute=return minute;this.second=return srcond;}(3) 如果以下代码段出现在Time类的测试程序的main方法中,输出结果是什么?Time t1=new Time(5);System.out.println("The time is "+t1.toStandardString());5 :0:AM输出“The time is 4AM”(4) 如果以下代码段出现在Time类的测试程序的main方法中,输出结果是什么?Time t2=new Time(13,59,60);System.out.println("The time is"+t2.toStandardString());1:59:PM输出“The time is 1:59:60PM”(5) 如果以下代码段出现在Time类的测试程序的main方法中,输出结果是什么?Time t3=new Time(13,30,0);Time t4=new Time(t3);System.out.println("The time is"+t4.toUniversalString());13:30:0输出“The time is 1:30:00PM”2. 确定以下代码段中是否存在错误,如果有错误,指出是逻辑错误还是语法错误,请在程序中用“~~~~~”标出错误的地方,并在第个练习的空白处写下正确的代码。
如果代码中没有错误,则在答案中写上“没有错误”。
注意:在每个程序段中可能包含多处错误。
(1) 以下代码定义了Product类,它有一个不带参数的构造器,将产品的名称设置为一个空的String,将price设置为0.00;该类还有一个toProductString方法,它返回一个包含产品的name和price的Stringimport java.text.*;public class Product{private String name;private double price;private static DecimalFormat money=new DecimalFormat("$0.00");public Product(){name=" ";price=0.00;}public String toProductString(){return name+" costs "+money.format(price);}}//end class Product答案:没有错误(2) 如下代码定义了Product类的另一个构造器,它有2个参数,并将这些参数赋给相应的实例变量public Product(String name, double price){name= name;price=price;}答案:逻辑错误= name;this.price=price;//重名的时候用this.域名访问当前域名,因为如果域名和方法中的局部变量同名的时候,名称指向的是局部变量。
(3) 如下代码定义了两个set方法,用于设置Product类的name和pricepublic setName( ){=name;}public setPrice( ){this.price=price;}答案:语法错误public setName( string name){=name;}public setPrice( double price ){this.price=price;}(4) 如下代码位于测试Product类的应用程序的main方法中,创建一个Product对象,并显示一个包含对象的实例变量值的StringProduct p1=new Product("Milk", 5.5);System.out.println(+ " "+p1.price);答:语法错误缺少程序段public Product(string name,double price){=name;this.price=price;}(5) 如下代码位于测试Product类的应用程序的main方法中,创建一个Product对象,设置其实例变量的值,并显示一个包含实例变量值的StringProduct p1=new Product();p1.setName();p1.setPrice();System.out.println(p1.toProductString("Eggs",3));答案:语法错误Product p1=new Product();p1.setName(“name”);p1.setPrice(price);System.out.println(p1.toProductString("Eggs",3));3.补充以下代码,完成对一个分数类Fraction的定义,并测试这个类public class Fraction{private int nume; //分子private int deno; //分母Fraction();//无参构造器public Fraction( ){this.nume=0;this.deno=0;}//初始化实例变量//有参构造器public Fraction( int n, int d ){If(d==0){Throw new Exception(“分母为0是不可用的!”)}This.nume=n;This.deno=d;}//初始化实例变量//化简分数方法void FracSimp( ){//求分数的分子和分母的最大公约数//化简分数Int min=Math.min(num,deno);If(num%2==0&&deno%2==0){For(int i=min;i>2;i-=2){If(nume%i==0&&deno%i==0){Nume=nume/i;Deno=deno/i;Break;}}}Esle{if(min%2==0)min--;for(int i=min;i>=2;i-=2){If(nume%i==0 && deno%i==0){nume = nume/i;deno = deno/i;break;}}}}/*欧几里德算法定理:gcd(a,b) = gcd(b,a mod b),以下是c语言的代码,可以参考void swap(int & a, int & b) { int c = a; a = b; b = c; } int gcd(int a,int b) {if(0 == a ) { return b; }if( 0 == b) { return a; }if(a > b) { swap(a,b); }int c;for(c = a % b ; c > 0 ; c = a % b) { a = b; b = c; }return b;} *///分数输出方法void FracOutput( ){//输出分数的分子和分母If(nume==0)System.out.println(0);ElseSystem.out.println(nume+"/"+deno);}public static void main(String args[]){//定义第1个Fraction类的对象引用f1,调用无参构造方法// 定义第2个Fraction类的对象引用f2,调用有参构造方法//调用化简分数方法//调用分数输出方法Fraction f1 = new Fraction();f1.FracSimp();f1.FracOutput();Fraction f2 = new Fraction(363,4569);F2.FracSimp();f2.FracOutput();}4.构造一个Rectangle类(矩形类),它有两个浮点型属性length(长)和width(宽)。