Oggi è 14/08/2022, 2:07

Tutti gli orari sono UTC + 1 ora [ ora legale ]





 Pagina 1 di 1 [ 1 messaggio ] 

  Apri un nuovo argomento Rispondi all’argomento

  Stampa pagina

Autore Messaggio
 Oggetto del messaggio: [GUIDA]Lezioni di java - Lezione 6
MessaggioInviato: 31/10/2010, 21:50 
Avatar utente
Utente

Iscritto il: 29/10/2010
Messaggi: 43
Località: Cosenza - ITA
Favourite GTA: San Andreas
Xfire: giuseppemazzei

Karma
0


Non connesso
public static int [][] Vander(int a[])
{
int M[][] = new int[a.length][a.length];
for(int i = 0; i < M.length; i++)
{
for(int j = 0; j < M[0].length; j++)
{
M[i][j] = Math.pow(a[j], i);
}
}
}

Questo è lo script proposto come esercizio nel topic precedente. Spero che lo abbiate fatto bene, altrimenti vi invito a dare nuovamente no sguardo alle lezioni precedenti.


Introduzione Alla Programmazione Orientata agli Oggetti
La POO(Programmazione Orientata agli Oggetti), insegna come creare delle funzioni predefinite, per poi essere utilizzate in un programma, richiamando ciò che è stato scritto in quello script. La POO tratta ogni sorta di variabile come un Object(Oggetto), come vi farò vedere alla fine del topic lo script dei punti nel piano.
Per creare un oggetto c'è bisogno di un costruttore, che, come suggerisce il nome, crea proprio l'oggetto. La POO crea dei metodi predefiniti ed immutabili, cioè che non possono essere modificati quando si crea un programma. Non è un programma eseguibile, quindi facile intuire che manca il main, che andrà invece utilizzato quando si va a creare il programma.


package
i package della POO non sono altro che delle celle di memoria, che occupano un'allocazione ben precisa(ma non ve la so dire :P) nel disco del computer.
per creare un package, in testa allo script, va scritto: package [nome che volete]; ad esempio:
package geometria;


import
Una volta creato il package e lo script, dal programma si devono "includere" le funzioni definite nello script del package, utilizzando la funzione import, come avevamo visto come si faceva per l'oggetto Math e per lo Scanner. Math e Scanner sono package gia predefiniti di Java, quindi non c'è bisogno per noi di creare il package di questi oggetti.
Ad esempio se abbiamo bisogno di importare nel programma gli oggetti che abbiamo creato in un package dovremo scrivere:
import [nome package].[nome della class];
ad esempio
import geometria.rette;


final
Capita a volte di voler utilizzare un tipo di variabile predefinita ed immutabile, quindi la cella di memoria nell'heap relativa a questa variabile non potrà cambiare. Il final è molto utilizzato quando abbiamo bisogno di utilizzare un numero piu volte, e se vogliamo cambiarlo non abbiamo bisogno di cercare il numero in tutto lo script, perchè si potrebbe cambiare qualcosa che non va cambiato.
Per creare una variabile final dovremo scrivere:
final int NOME_VARIABILE = 10; //10 per esempio eh, potete cambiarlo voi quando volete.

Adesso vedremo il package dei punti nel piano come preannunciato prima, e dopo vedremo un programma che utilizza l'oggetto punto e in piu un package dell'oggetto retta (vi posto anche questo)
Noterete sicuramente che i metodi NON sono static, ciò significa che possono essere invocati da altri programmi, altrimenti non avrebbe senso il package. Se i metodi fossero stati static non avremmo avuto la possibilità di invocarli da altre parti.
Noterete anche che i alcuni metodi non sono public ma private, esiste anche il protected, non sto qui a spiegarvi cosa cambia perchè, ai fini di Pawno, non ci interessa. Se volete saperlo comunque chiedetelo pure! Per il momento vedete il private come un metodo che non puo essere cambiato, nè visto, nè letto da nessuno. Solo il programmatore è a conoscenza di questo metodo!



package poo.geom;

public class Retta {
private double m;
private double q;

public Retta(double m, double q) {
this.m = m;
this.q = q;
}
public boolean RetteParallele(Retta r, Retta t)
{
if(r.m == t.m) return true;
return false;
}
public boolean RettePerpenticolari(Retta r, Retta t)
{
if(r.m * t.m == -1) return true;
return false;
}
public boolean RetteIncidenti(Retta r, Retta t)
{
if(!RetteParallele(r, t)) return true;
return false;
}
public boolean RetteCoincidenti(Retta r, Retta t)
{
if(r.m == t.m && r.q == t.q)return true;
return false;
}
public Point PuntoIntersezione(Retta r, Retta t)
{
if(RetteCoincidenti(r, t))
{
System.out.println("Le due rette sono coincidenti!");
System.exit(-1);
}
double x = (t.q - r.m)/(r.m - t.m);
double y = (r.m * x)/r.q;
Point p = new Point(x, y);
return p;
}
public double Distanza(Retta r, Retta t)
{
if(RetteCoincidenti(r, t))
{
return 0.0;
}
if(RetteIncidenti(r, t))
{
System.out.println("Le due rette sono incidenti");
System.exit(-1);
}
return (Math.abs(r.q - t.q));
}


}











package poo.geom;

public class Point {
public static final double EPS = 1e-20;
private double x;
private double y;

public Point() {

}

public Point(double x, double y) {
this.x = x;
this.y = y;
}

public Point(Point p) {
x = p.x;
y = p.y;
}

public double distance(Point p) {
double dx = x - p.x;
double dy = y - p.y;
return Math.sqrt(dx * dx + dy * dy);
}

public double getPhase() {

return Math.atan2(y, x);
}

public double getModule() {

return Math.sqrt(x * x + y * y);
}

public double getX() {
return x;
}

public double getY() {

return y;
}

public String toString() {

return "(x=" + x + ",y=" + y + ")";
}
}















import java.util.Scanner;

import poo.geom.Point;

import poo.geom.Retta;

public class Es1 {

private static Scanner sc;

private static Point readPoint(String msg){
System.out.println("Inserisci coordinate punto "+msg);
System.out.print("x= ");
double x=sc.nextDouble();
System.out.print("y= ");
double y=sc.nextDouble();
return new Point(x,y); //XXX
}

private static void calcolaDistanza(){
Point p1=readPoint("1");
Point p2=readPoint("2");
double dist=p1.distance(p2);
System.out.printf("Distanza= %f8.3",dist);
}

private static void verificaAllineamento(){
Point p1=readPoint("1");
Point p2=readPoint("2");
Point p3=readPoint("3");
double x1=p1.getX();
double x2=p2.getX();
double x3=p3.getX();
double y1=p1.getY();
double y2=p2.getY();
double y3=p3.getY();
double s1=(y3-y1)*(x2-x1);
double s2=(y2-y1)*(x3-x1);

if( s1==s2 ){ //??
System.out.println("I tre punti sono allineati");
}else{
System.out.println("I tre punti NON sono allineati");
}
}

private static void rettaFraDuePunti(){
Point p1=readPoint("1");
Point p2=readPoint("2");

double x1=p1.getX();
double y1=p1.getY();
double x2=p2.getX();
double y2=p2.getY();
System.out.println("L'equazione è:");
if( x1==x2 ){
System.out.printf("x= %f",x1);
return;
}
if( y1==y2 ){
System.out.printf("y= %f",y1);
return;
}
//y=mx+q;
//m=dy/dx
double m=(y2-y1)/(x2-x1);
double q=y1-(m*x1);
System.out.printf("y = %f * x + %f\n" ,m,q);
}

private static void centroDiMassa(){
//http://it.wikipedia.org/wiki/Centro_di_massa
System.out.print("Numero di punti >");
int size=sc.nextInt();
Point[] punti= new Point[size]; //???
double[] masse = new double[size];
System.out.println();
for(int i=0; i<size; ++i){
punti[i]=readPoint(""+i);
System.out.print("Massa >");
masse[i]=sc.nextDouble();
System.out.println();
}
double xNum = 0.0;
double yNum = 0.0;
double den = 0.0;
double x,y,m;
for(int i=0; i<size; ++i){
x=punti[i].getX();
y=punti[i].getY();
m=masse[i];
xNum+=x*m;
yNum+=y*m;
den+=m;
}
x=xNum/den;
y=yNum/den;
Point c = new Point(x,y);
System.out.println("Il centro di massa è: "+c);
}

public static void main(String[] args) {
sc = new Scanner(System.in);
for(;;){
System.out.println("Menu:");
System.out.println("1) Esci");
System.out.println("2) Calcola distanza fra due punti");
System.out.println("3) Verifica se 3 punti sono allineati");
System.out.println("4) Calcolo della retta fra due punti");
System.out.println("5) Calcolo del centro di massa (baricentro)");
System.out.print("\n>");

int scelta=sc.nextInt();
switch(scelta){
case 1:
System.out.print("Arrivederci...");
System.exit(-1);
break;
case 2:
calcolaDistanza();
break;
case 3:
verificaAllineamento();
break;
case 4:
rettaFraDuePunti();
break;
case 5:
centroDiMassa();
break;
default:
System.out.println("Scelta non valida");
}
}//for
}//main

}



Conclusione
Non mi sono fermato molto sulla POO in quanto non ha una grandissima importanza ai fini dello scopo di queste guide:
imparare a scriptare con Pawno.
Consiglio di esercitarvi ancora con esercizi e programmi sugli array.
Scaricate qualche appello svolto da qui:
www.lis.deis.unical.it/courses/fi/c...liSvolti270.rar
Se avete problemi o dubbi chiedete pure.
Adesso si passerà a Pawn, il nome dei topic delle lezioni sarà: Lezioni di Pawno.
Nel prossimo topic parlerò di filterscript e gamemode, del file server.cfg, la RCON e i metodi principali.
Commenti, proposte e altro in questo post, cosi che tutti potranno apprendere le basi da questo forum.
Se volete ulteriori spiegazioni chiedete pure,
Tanti saluti,
Giuseppe Mazzei

_________________
Immagine


Top
 E-mail  
 

Visualizza ultimi messaggi:  Ordina per  
 Pagina 1 di 1 [ 1 messaggio ] 

  Apri un nuovo argomento Rispondi all’argomento

Tutti gli orari sono UTC + 1 ora [ ora legale ]



Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti


Non puoi aprire nuovi argomenti
Non puoi rispondere negli argomenti
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi inviare allegati

Cerca per:
Vai a:  
cron