You are on page 1of 9

4 Ministerul Educației al Republicii Moldova

Universitatea Tehnică a Moldovei

Facultatea Calculatoare, Informatică şi Microelectronică

Departamentul Ingineria Software şi Automatică

Raport
Lucrarea de laborator nr.4
Disciplina: Tehnici avansate de programare

A efectuat: st. gr. CR-181


Patras Cristi

A verificat Petic Mircea

Chișinău - 2020

1. Tema lucrării:
Polimorfizmul

2. Scopul lucrării:

⮚ Însuşirea modalităţilor de realizare a polimorfizmului în Java;

3. Etapele de realizare:

1. Crearea clase noi;


2. Crearea metodelor necesare;
3. Realizarea formelor de polimorfizm;
4. Crearea interfeţii programului;
5. Prezentarea lucrării.

Sarcina:

Realizarea polimorfismului pentru clasele date cu crearea metodelor conform specificului claselor.

Fraction ComplexFracion.

Codul programului:

Clasa Lab4.java:
public class Lab4
{

public static void main(String[] args)


{
UI ui = new UI();
}
}

Clasa UI.java:

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class UI implements ActionListener


{
JFrame frame;

JTextField complexNumarator1TF = new JTextField(3);


JTextField complexNumarator2TF = new JTextField(3);
JTextField complexNumitor1TF = new JTextField(3);
JTextField complexNumitor2TF = new JTextField(3);
JTextField numitorTF = new JTextField(3);
JTextField numaratorTF = new JTextField(3);

JLabel resultLabel = new JLabel();


JLabel complexResultLabel = new JLabel();

JCheckBox roundedCheckbox;

Fraction fraction = new Fraction();


ComplexFraction complex = new ComplexFraction();

UI() {
createWindow();
}

private void createWindow()


{
frame = new JFrame("Fraction");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500, 150);

createTopPanel();
createSecondPanel();
createComplexFractionPanel();

frame.setVisible(true);
}

private void createSecondPanel()


{
JPanel panel = new JPanel();
JLabel label = new JLabel();
roundedCheckbox = new JCheckBox();

label.setText("Rounded: ");
roundedCheckbox.addActionListener(this);
roundedCheckbox.setSelected(false);

panel.add(label);
panel.add(roundedCheckbox);
frame.add(panel, BorderLayout.NORTH);
}

private void createComplexFractionPanel()


{
JPanel panel = new JPanel();

complexNumarator1TF.addActionListener(this);
complexNumarator2TF.addActionListener(this);
complexNumitor1TF.addActionListener(this);
complexNumitor2TF.addActionListener(this);

panel.add(new JLabel("("));
panel.add(complexNumitor1TF);
panel.add(new JLabel(" / "));
panel.add(complexNumarator1TF);
panel.add(new JLabel(") / ("));
panel.add(complexNumitor2TF);
panel.add(new JLabel(" / "));
panel.add(complexNumarator2TF);
panel.add(new JLabel(") = "));
panel.add(complexResultLabel);

frame.add(panel, BorderLayout.CENTER);
}

private void createTopPanel()


{
JPanel panel = new JPanel();

numitorTF.addActionListener(this);
numaratorTF.addActionListener(this);

panel.add(numitorTF);
panel.add(new JLabel(" / "));
panel.add(numaratorTF);
panel.add(new JLabel(" = "));
panel.add(resultLabel);

frame.add(panel, BorderLayout.AFTER_LAST_LINE);
}

@Override
public void actionPerformed(ActionEvent arg0)
{
calculateResults();
}
//
// Calculation
//

private void calculateResults()


{
calculateFractionResults();
calculateComplexFractionResults();
}

private void calculateComplexFractionResults()


{
float numitor1 = Float.parseFloat(complexNumitor1TF.getText());
float numarator1 = Float.parseFloat(complexNumarator1TF.getText());
complex.setNumitor(new Fraction(numitor1, numarator1));

float numitor2 = Float.parseFloat(complexNumitor2TF.getText());


float numarator2 = Float.parseFloat(complexNumarator2TF.getText());
complex.setNumarator(new Fraction(numitor2, numarator2));

try {
float result = complex.getResult(roundedCheckbox.isSelected());
complexResultLabel.setText(String.valueOf(result));
}
catch(Exception e)
{
complexResultLabel.setText(e.getLocalizedMessage());
}
}
private void calculateFractionResults()
{
float numitor = Float.parseFloat(numitorTF.getText());
float numarator = Float.parseFloat(numaratorTF.getText());

fraction.setNumarator(numarator);
fraction.setNumitor(numitor);

try {
float result = fraction.getResult(roundedCheckbox.isSelected());
resultLabel.setText(String.valueOf(result));
}
catch(Exception e)
{
resultLabel.setText(e.getLocalizedMessage());
}
}
}

Clasa Fraction.java:

public class Fraction


{
private float numitor;
private float numarator;

Fraction(){}
Fraction(float a, float b) {
this.numitor = a;
this.numarator = b;
}

public void setNumitor(float a) {


this.numitor = a;
}

public void setNumarator(float a) {


this.numarator = a;
}

public float getResult() {


return numitor / numarator;
}

public float getResult(boolean rounded) {


return rounded ? Math.round(getResult()) : getResult();
}
}

Clasa ComplexFraction.java:

public class ComplexFraction


{
private Fraction numitor;
private Fraction numarator;

ComplexFraction(){}
ComplexFraction(Fraction numitor, Fraction numarator) {
this.numitor = numitor;
this.numarator = numarator;
}

public void setNumitor(Fraction f) {


this.numitor = f;
}

public void setNumarator(Fraction f) {


this.numarator = f;
}

public float getResult() {


return numitor.getResult() / numarator.getResult();
}

public float getResult(boolean rounded) {


return rounded ? Math.round(getResult()) : getResult();
}
}

Rezultatele obtinute:
In urma rularii programului obtinem asa o fereastra:

Pe primul rand putem sa putem bifa pentru a rotunji numere.


Pe al doilea rand putem calcula o fractie complexa de forma

Pe al treilea rand putem calcula o fractie simpla.

Concluzie:
În cadrul acestei lucrări de laborator am studiat cum lucreaza polimorfizmul in limbajul de programare
Java si am realizat un exemplu real. Deasemenea am creat un User Interface pentru a introduce si afisa datele.
Pentru aceasta am folosit bibliotecile standate din Java.

Bibliografie:
1. https://docs.oracle.com/javase/tutorial/
2. Cursul de TAP

You might also like