Sprawozdanie 1 – Programowanie Obiektowe
------------------------
Automatyka i Robotyka
Gr. 1
1. Kod programu:
brylaSim.java
public
class
brylaSim {
public
static
void
main(String[]
args
) {
//Inicjacja obiektow
punktM
A
=
new
punktM();
punktM
B
=
new
punktM(100);
punktM[]
E
=
new
punktM[11];
for
(
int
i
=0;
i
<=10;
i
++)
//Petla generujaca tablice obiektów
{
E
[
i
]=
new
punktM(10+
i
);
};
A
.setMass(50);
//Komunikaty:
System.
out
.println(
"A to: "
+
A
+
". Masa A wynosi "
+
A
.getMass()+
", a
moment bezwladnosci "
+
A
.moment()+
". B to: "
+
B
+
". Masa B wynosi
"
+
B
.getMass()+
", a moment bezwladnosci "
+
B
.moment());
System.
out
.println(
"Moment bezwladnosci A wgledem osi rownoleglej
o 10 wynosi "
+
A
.momentSteiner(10));
for
(
int
i
=0;
i
<=10;
i
++)
{
System.
out
.println(
"Masa punktu E["
+
i
+
"] wynosi
"
+
E
[
i
].getMass()+
", glowny moment bezwlandosci wynosi "
+
E
[
i
].moment()+
", a
moment bezwladnosci wzgledem osi odległej o 5 wynosi
"
+
E
[
i
].momentSteiner(5)+
". Opis obiektu to: "
+
E
[
i
]);
};
}
}
punktM.java
public
class
punktM {
//pola
private
double
mass
;
//konstruktory
public
punktM (){
mass
=0;};
//konstruktor domyslny
public
punktM (
double
mass
)
//konstruktor zwykly - uniemozliwia nadanie
ujemnej masy
{
if
(
mass
>0)
{
this
.
mass
=
mass
;
}
else
{
this
.
mass
=0;
}
}
//akcesory
public
double
getMass(){
return
mass
;}
//akcesor czytajacy
public
void
setMass(
double
mass
)
//akcesor piszacy - uniemozliwia
nadanie ujemnej masy
{
if
(
mass
>0)
{
this
.
mass
=
mass
;
}
else
{
this
.
mass
=0;
}
}
//metody
public
double
moment(){
return
0;}
//Oblicznie momentu bezwladnosci
public
double
momentSteiner(
float
a
){
return
moment()+
mass
*
a
*
a
;}
//Oblicznie momentu z tw. Steinera
public
String toString(){
return
"Punkt Materialny"
;}
//opis obiektu
}
2. Wynik działania programu:
A to: Punkt Materialny. Masa A wynosi 50.0, a moment bezwladnosci 0.0. B to: Punkt
Materialny. Masa B wynosi 100.0, a moment bezwladnosci 0.0
Moment bezwladnosci A wgledem osi rownoleglej o 10 wynosi 5000.0
Masa punktu E[0] wynosi 10.0, glowny moment bezwlandosci wynosi 0.0, a moment
bezwladnosci wzgledem osi odległej o 5 wynosi 250.0. Opis obiektu to: Punkt Materialny
Masa punktu E[1] wynosi 11.0, glowny moment bezwlandosci wynosi 0.0, a moment
bezwladnosci wzgledem osi odległej o 5 wynosi 275.0. Opis obiektu to: Punkt Materialny
Masa punktu E[2] wynosi 12.0, glowny moment bezwlandosci wynosi 0.0, a moment
bezwladnosci wzgledem osi odległej o 5 wynosi 300.0. Opis obiektu to: Punkt Materialny
Masa punktu E[3] wynosi 13.0, glowny moment bezwlandosci wynosi 0.0, a moment
bezwladnosci wzgledem osi odległej o 5 wynosi 325.0. Opis obiektu to: Punkt Materialny
Masa punktu E[4] wynosi 14.0, glowny moment bezwlandosci wynosi 0.0, a moment
bezwladnosci wzgledem osi odległej o 5 wynosi 350.0. Opis obiektu to: Punkt Materialny
Masa punktu E[5] wynosi 15.0, glowny moment bezwlandosci wynosi 0.0, a moment
bezwladnosci wzgledem osi odległej o 5 wynosi 375.0. Opis obiektu to: Punkt Materialny
Masa punktu E[6] wynosi 16.0, glowny moment bezwlandosci wynosi 0.0, a moment
bezwladnosci wzgledem osi odległej o 5 wynosi 400.0. Opis obiektu to: Punkt Materialny
Masa punktu E[7] wynosi 17.0, glowny moment bezwlandosci wynosi 0.0, a moment
bezwladnosci wzgledem osi odległej o 5 wynosi 425.0. Opis obiektu to: Punkt Materialny
Masa punktu E[8] wynosi 18.0, glowny moment bezwlandosci wynosi 0.0, a moment
bezwladnosci wzgledem osi odległej o 5 wynosi 450.0. Opis obiektu to: Punkt Materialny
Masa punktu E[9] wynosi 19.0, glowny moment bezwlandosci wynosi 0.0, a moment
bezwladnosci wzgledem osi odległej o 5 wynosi 475.0. Opis obiektu to: Punkt Materialny
Masa punktu E[10] wynosi 20.0, glowny moment bezwlandosci wynosi 0.0, a moment
bezwladnosci wzgledem osi odległej o 5 wynosi 500.0. Opis obiektu to: Punkt Materialny
Program wyświetla kolejno: opis obiektu, masę i główny moment bezwładności dla punktu A, a dalej robi to samo
dla punktu B. Później podaje wartość momentu bezwładności punktu A dla osi odległej o 50.
Następnie program pokazuje analogiczny opis dla tablicy E złożonej z 11 punktów materialnych, z których każdy
kolejny ma masę o 1 większą.
3. Odpowiedzi na pytania:
1. W Javie istnieją 4 poziomy dostępu do pól i metod:
public – dostępne dla wszystkich klas
protected – dostępne dla klas w tej samej paczce lub w klasach dziedziczących
domyślny – (używa się go przez niezapisywanie modyfikatora dostępu przy metodzie/klasie) dostępne
tylko dla klas w tej samej paczce
private – dostępne tylko dla klasy, gdzie zostało zdefiniowane pole/metoda
2. Aby chronić wartości pól przez przyjęcie nieodpowiedniej wartości (np. przypisanie zmiennej masa wartości
ujemnej) pola klasy można oznaczyć jako private (z tym poziomem dostępu się wiąże) i umożliwia dostęp do nich
przez funkcje wewnątrz tej klasy – czyli akcesory. Wyróżniamy akcesory piszące (modyfikujące wartość pola) i
czytające (pobierające wartość pola).
3. Konstruktorem nazywamy funkcję, która inicjuje się przy tworzeniu obiektu. Służą np. nadawaniu wartości
polom obiektów przy ich inicjacji. Istnieją konstruktory domyślne, zwykłe i kopiujące.
Konstruktor domyślny nie przyjmuje żadnych argumentów np.
nazwaKlasy() {instrukcje;}
Konstruktor zwykły przyjmuje przynajmniej 1 argument np.
nazwaKlasy(typ argument1, typ argument2,…) {instrukcje;}
Konstruktor kopiujący przyjmuje za argument obiekt tej samej klasy np.
nazwaKlasy(nazwaKlasy Obiekt) {instrukcje;}
4. Metody służą ułatwieniu pisania programów – możemy zastąpić metodą wielokrotne powtarzanie takich samych
linii kodu w programie. Ułatwia to też modyfikację kodu – zamiast poprawiać kod w wielu powtarzających się
miejscach w programie – poprawiamy go w 1 miejscu. Metody możemy podzielić na 4 typy:
Argumentowe zwracające wartość:
typZwracanejWartości nazwaMetody (typArgumentu argument1,…)
{instrukcje;
return wartość;}
Argumentowe bez zwracania wartości:
void nazwaMetody (typArgumentu argument1,…)
{instrukcje;}
Bezargumentowe zwracające wartość:
typZwracanejWartości nazwaMetody ()
{instrukcje;
return wartość;}
Bezargumentowe niezwracające wartości:
void nazwaMetody ()
{instrukcje;}
Wyróżniamy jeszcze metody statyczne i niestatyczne. Metody statyczne, w przeciwieństwie do niestatycznych przy
ich deklaracji zawierają słowo static przed typem zwracanej wartości. Metody statyczne należą do danej klasy i
nie modyfikują obiektów danej klasy, natomiast metod niestatycznych możemy użyć tylko razem z obiektem.
Wywołanie metody niestatycznej:
nazwaObiektu.nazwaMetody(argumenty,…);
Wywołanie metody statycznej:
nazwaKlasy.nazwaMetody(argumenty,…);
4. Program na ocenę bdb:
brylaSim.java
public
class
brylaSim {
public
static
void
main(String[]
args
) {
brylaSztywna
B
=
new
brylaSztywna(3);
//Przypisywanie wartosci punktom
B
.
P
[0].setX(0);
B
.
P
[0].setY(1);
B
.
P
[0].setZ(0);
B
.
P
[0].setMass(1);
B
.
P
[1].setX(1);
B
.
P
[1].setY(0);
B
.
P
[1].setZ(0);
B
.
P
[1].setMass(2);
B
.
P
[2].setX(0);
B
.
P
[2].setY(-9);
B
.
P
[2].setZ(1);
B
.
P
[2].setMass(1);
//Komunikaty
System.
out
.println(
"Srodek masy bryly ma wspolrzedne:
("
+
B
.srodekX()+
";"
+
B
.srodekY()+
";"
+
B
.srodekZ()+
")"
);
System.
out
.println(
"Moment bezwladnosci bryly wzgledem srodka masy
rownolegly do OX wynosi: "
+
B
.momentX()+
", do OY: "
+
B
.momentY()+
", a do OZ:
"
+
B
.momentZ());
}
}
punktM.java
public
class
punktM {
//pola
private
double
mass
;
private
float
x
,
y
,
z
;
//Dodane na potrzeby bryly sztywnej
//konstruktory
public
punktM (){
mass
=0;
x
=0;
y
=0;
z
=0;};
//konstruktor domyslny
public
punktM (
double
mass
)
//konstruktor zwykly - uniemozliwia nadanie
ujemnej masy
{
if
(
mass
>0)
{
this
.
mass
=
mass
;
}
else
{
this
.
mass
=0;
}
}
//akcesory
public
double
getMass(){
return
mass
;}
//akcesor czytajacy
public
void
setMass(
double
mass
)
//akcesor piszacy - uniemozliwia
nadanie ujemnej masy
{
if
(
mass
>0)
{
this
.
mass
=
mass
;
}
else
{
this
.
mass
=0;
}
}
//Modyfikacja i odczyt wspolrzednych
float
getX(){
return
x
;}
float
getY(){
return
y
;}
float
getZ(){
return
z
;}
void
setX(
float
x
){
this
.
x
=
x
;}
void
setY(
float
y
){
this
.
y
=
y
;}
void
setZ(
float
z
){
this
.
z
=
z
;}
//metody
public
double
momentX(){
return
mass
*(
y
*
y
+
z
*
z
);}
//Oblicznie momentu
bezwladnosci wzgledem osi OX
public
double
momentY(){
return
mass
*(
x
*
x
+
z
*
z
);}
//Oblicznie momentu
bezwladnosci wzgledem osi OY
public
double
momentZ(){
return
mass
*(
x
*
x
+
y
*
y
);}
//Oblicznie momentu
bezwladnosci wzgledem osi OZ
public
double
momentSteinerX(
double
a
,
double
b
,
double
c
){
return
mass
*((
y
-
b
)*(
y
-
b
)+(
z
-
c
)*(
z
-
c
));}
//Oblicznie momentu wzgledem osi rownoleglej
do OX
public
double
momentSteinerY(
double
a
,
double
b
,
double
c
){
return
mass
*((
x
-
a
)*(
x
-
a
)+(
z
-
c
)*(
z
-
c
));}
//Oblicznie momentu wzgledem osi rownoleglej
do OY
public
double
momentSteinerZ(
double
a
,
double
b
,
double
c
){
return
mass
*((
x
-
a
)*(
x
+
a
)+(
y
-
b
)*(
y
-
b
));}
//Oblicznie momentu wzgledem osi rownoleglej
do OZ
public
String toString(){
return
"Punkt Materialny"
;}
//opis obiektu
}
brylaSztywna.java
public
class
brylaSztywna {
//Pola
private
int
iloscP
=0;
punktM[]
P
;
//Konstruktory
brylaSztywna (
int
ilosc
)
{
iloscP
=
ilosc
;
P
=
new
punktM[
iloscP
];
for
(
int
i
=0;
i
<
iloscP
;
i
++)
{
P
[
i
]=
new
punktM();
}
}
//Metody
//Wyznaczanie srodka ciezkosci
double
srodekX()
{
double
suma
=0;
double
masa
=0;
for
(
int
i
=0;
i
<
iloscP
;
i
++)
{
suma
+=
P
[
i
].getMass()*
P
[
i
].getX();
masa
+=
P
[
i
].getMass();
}
return
suma
/
masa
;
}
double
srodekY()
{
double
suma
=0;
double
masa
=0;
for
(
int
i
=0;
i
<
iloscP
;
i
++)
{
suma
+=
P
[
i
].getMass()*
P
[
i
].getY();
masa
+=
P
[
i
].getMass();
}
return
suma
/
masa
;
}
double
srodekZ()
{
double
suma
=0;
double
masa
=0;
for
(
int
i
=0;
i
<
iloscP
;
i
++)
{
suma
+=
P
[
i
].getMass()*
P
[
i
].getZ();
masa
+=
P
[
i
].getMass();
}
return
suma
/
masa
;
}
//Obliczanie momentow wzgledem srodka masy
double
momentX()
{
double
moment
=0;
for
(
int
i
=0;
i
<
iloscP
;
i
++)
{
moment
+=
P
[
i
].momentSteinerX(srodekX(),srodekY(),srodekZ());
}
return
moment
;
}
double
momentY()
{
double
moment
=0;
for
(
int
i
=0;
i
<
iloscP
;
i
++)
{
moment
+=
P
[
i
].momentSteinerY(srodekX(),srodekY(),srodekZ());
}
return
moment
;
}
double
momentZ()
{
double
moment
=0;
for
(
int
i
=0;
i
<
iloscP
;
i
++)
{
moment
+=
P
[
i
].momentSteinerZ(srodekX(),srodekY(),srodekZ());
}
return
moment
;
}
}
Wynik działania programu:
Srodek masy bryly ma wspolrzedne: (0.5;-2.0;0.25)
Moment bezwladnosci bryly wzgledem srodka masy rownolegly do OX wynosi:
66.75, do OY: 1.75, a do OZ: 67.0
Program najpierw podaje środek masy bryły o parametrach podanych wewnątrz programu, a następnie oblicza jej
moment bezwładności względem tego środka masy równoległy do osi układu współrzędnych.