4.4.8 Moştenire (inheritance)

Moștenirea în Java este unul din cele mai importante mecanisme care se leagă de Programarea Orientată pe Obiecte. Cu ajutorul acestui mecanism putem reutiliza codul dintr-o altă clasă.

Moștenirea este o relație între 2 sau mai multe clase în care clasa derivată preia proprietățile și metodele clasei din care derivă.

Clasa de bază este clasa de unde se preiau proprietățile și metodele(funcțiile) înclasa derivată. Aceasta mai este numită și clasa părinte sau super clasă

Clasa derivată este clasa care preia proprietățile și metodele clasei părinte și mai este numită și clasă copil(sau subclasă) în raport cu clasa de unde moștenește proprietățile și metodele

Apare atunci când o clasă extinde o altă clasă

class ClasaNoua extends ClasaVeche

(ClasaNoua este o clasă copil a clasei ClasaVeche)

Toate clasele și atributele din clasa părinte sunt preluate în clasa copil!

@Override

înseamnă că vom suprascrie o funcţionalitate a unei clase rescriind o funcţie sau un atribut

Cuvântul cheie super. … ne dă posibilitatea de a folosi ceva din clasa părinte

O clasă nu va face ceva de una singură ci doar defineşte metode şi stabileşte atribute

Lion mother of Notches Rongai Pride in Masai Mara, Kenya.

Iată un exemplu de utilizare a moștenirii în contextul FTC, folosind biblioteca FTC SDK pentru a programa un robot:

Definim o clasă de bază BaseRobot care conține metode și funcționalități comune tuturor roboților.

Definim o clasă derivată CompetitionRobot care extinde BaseRobot și adaugă funcționalități specifice competiției.

package org.firstinspires.ftc.teamcode;

// Importurile necesare din biblioteca FTC
import com.qualcomm.robotcore.eventloop.opmode.LinearOpMode;
import com.qualcomm.robotcore.hardware.DcMotor;

// Clasa de bază pentru robot
public class BaseRobot {
// Declarație pentru motoarele robotului
public DcMotor leftDrive = null;
public DcMotor rightDrive = null;

// Referință la op mode
public LinearOpMode opMode;

// Constructor
public BaseRobot(LinearOpMode opMode) {
this.opMode = opMode;
}

// Metodă pentru inițializarea hardware-ului
public void initHardware() {
leftDrive = opMode.hardwareMap.get(DcMotor.class, "left_drive");
rightDrive = opMode.hardwareMap.get(DcMotor.class, "right_drive");

leftDrive.setDirection(DcMotor.Direction.FORWARD);
rightDrive.setDirection(DcMotor.Direction.REVERSE);
}

// Metodă pentru a deplasa robotul înainte
public void driveForward(double power) {
leftDrive.setPower(power);
rightDrive.setPower(power);
}

// Metodă pentru a opri robotul
public void stop() {
leftDrive.setPower(0);
rightDrive.setPower(0);
}
}

// Clasa pentru robotul competiției care extinde BaseRobot
public class CompetitionRobot extends BaseRobot {

// Constructor
public CompetitionRobot(LinearOpMode opMode) {
super(opMode);
}

// Metodă specifică competiției pentru a roti robotul
public void rotate(double power) {
leftDrive.setPower(power);
rightDrive.setPower(-power);
}

// Suprascrierea metodei driveForward pentru a adăuga un delay
@Override
public void driveForward(double power) {
super.driveForward(power);
opMode.sleep(1000); // Delay de 1 secundă
stop();
}
}

// OpMode-ul principal pentru competiție
@com.qualcomm.robotcore.eventloop.opmode.TeleOp(name="Competition Mode", group="Competition")
public class CompetitionOpMode extends LinearOpMode {
private CompetitionRobot robot;

@Override
public void runOpMode() {
// Inițializarea robotului
robot = new CompetitionRobot(this);
robot.initHardware();

// Așteptarea startului
waitForStart();

// Exemplu de mișcare a robotului
while (opModeIsActive()) {
robot.driveForward(0.5);
robot.rotate(0.5);
}
}
}

În acest exemplu:

  1. Clasa BaseRobot definește hardware-ul comun și metodele de bază pentru robot (inițializarea hardware-ului, deplasarea înainte, oprirea).
  2. Clasa CompetitionRobot extinde BaseRobot și adaugă funcționalități specifice competiției, cum ar fi metoda rotate pentru rotirea robotului. De asemenea, suprascrie metoda driveForward pentru a adăuga un delay de 1 secundă înainte de a opri robotul.
  3. Clasa CompetitionOpMode este un LinearOpMode care inițializează un obiect CompetitionRobot și controlează robotul în timpul competiției.