Faculté des Sciences de Luminy |
Programmation Orientée Objets, langage Java
|
Henri Garreta
|
public class Date { private int annee; private int mois; private int jour; private int jourSemaine; public Date(int jour, int mois, int annee) { boolean dateInvalide = mois < 1 || mois > 12 || jour < 1 || jour > 31 || jour == 31 && (mois == 4 || mois == 6 || mois == 9 || mois == 11) || jour == 30 && mois == 2 || jour == 29 && mois == 2 && annee % 4 != 0; if (dateInvalide) { System.out.println("Date incorrecte"); System.exit(0); } this.jour = jour; this.mois = mois; this.annee = annee; this.jourSemaine = jourSemaine(jour, mois, annee); } public int getJour() { return jour; } public int getMois() { return mois; } public int getAnnee() { return annee; } int getJourSemaine() { return jourSemaine; } public String toString() { return nomsDesJours[jourSemaine] + " " + jour + " " + nomsDesMois[mois - 1] + " " + annee; } public boolean infeg(Date d) { return annee < d.annee || annee == d.annee && mois < d.mois || annee == d.annee && mois == d.mois && jour <= d.jour; } private String[] nomsDesJours = { "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi", "dimanche" }; private String[] nomsDesMois = { "janvier", "fevrier", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "decembre" }; private int jourSemaine(int jour, int mois, int annee) { java.util.Calendar c = java.util.Calendar.getInstance(); c.set(annee, mois - 1, jour); return (c.get(java.util.Calendar.DAY_OF_WEEK) + 5) % 7; } public static void main(String[] args) { Date a = new Date(8, 12, 2006); Date b = new Date(10, 7, 1949); System.out.println(a); System.out.println(b); System.out.println(a.infeg(b) + " " + b.infeg(a) + " " + a.infeg(a)); } }
Fichier Point.java :
public class Point { private double x, y; public Point(double a, double b) { x = a; y = b; } public double x() { return x; } public double y() { return y; } public double rho() { return Math.sqrt(x * x + y * y); } public double theta() { return Math.atan2(y, x); } public void homothétie(double k) { x *= k; y *= k; } public void translation(double dx, double dy) { x += dx; y += dy; } public void rotation(double a) { double cosa = Math.cos(a); double sina = Math.sin(a); double x1 = cosa * x - sina * y; y = sina * x + cosa * y; x = x1; } public String toString() { return "(" + x + "," + y + ")"; } }
Fichier LignePol.java :
Une autre manière de faire qu'un objet LignePol contienne un objet Vector :import java.util.Vector; class LignePol { private Vector points = new Vector(); public void ajouterPoint(Point p) { points.addElement(p); } public void homothétie(double k) { for (int i = 0; i < points.size(); i++) ((Point) points.elementAt(i)).homothétie(k); } public void translation(double dx, double dy) { for (int i = 0; i < points.size(); i++) ((Point) points.elementAt(i)).translation(dx, dy); } public void rotation(double a) { for (int i = 0; i < points.size(); i++) ((Point) points.elementAt(i)).rotation(a); } public String toString() { return points.toString();
} static public void main(String[] args) { LignePol l = new LignePol(); for (int i = 0; i < 6; i++) l.ajouterPoint(new Point(i, 2 * i)); System.out.println(l); l.translation(10, -10); System.out.println(l); } }
Dans un cas comme dans l'autre, une autre manière d'obtenir le parcours du vecteur :import java.util.Vector; class LignePol extends Vector { public void ajouterPoint(Point p) { addElement(p); } public void homothétie(double k) { for (int i = 0; i < size(); i++) ((Point) elementAt(i)).homothétie(k); } public void translation(double dx, double dy) { for (int i = 0; i < size(); i++) ((Point) elementAt(i)).translation(dx, dy); } public void rotation(double a) { for (int i = 0; i < size(); i++) ((Point) elementAt(i)).rotation(a); } static public void main(String[] args) { LignePol l = new LignePol(); for (int i = 0; i < 6; i++) l.ajouterPoint(new Point(i, 2 * i)); System.out.println(l); l.translation(10, -10); System.out.println(l); } }
Essai sommaire : fichier TestLignePol.java :import java.util.*; class LignePol { private Vector points = new Vector(); public void ajouterPoint(Point p) { points.addElement(p); } public void homothétie(double k) { Iterator iter = points.iterator(); while (iter.hasNext()) ((Point) iter.next()).homothétie(k); } public void translation(double dx, double dy) { Iterator iter = points.iterator(); while (iter.hasNext()) ((Point) iter.next()).translation(dx, dy); } etc. }
Nouveau fichier Point.java :public class TestLignePol { public static void main(String[] args) { LignePol ligne = new LignePol(); for (int i = 0; i < 10; i++) ligne.ajouterPoint(new Point(Math.random(), Math.random())); System.out.println("avant : " + ligne); /* Exemple de transformation: rotation de 45 degrés */ /* autour du point (1, 1) */ ligne.translation(-1, -1); ligne.rotation(Math.PI / 4); ligne.translation(1, 1); System.out.println("après : " + ligne); } }
public class Point { private double r, t; public Point(double x, double y) { r = Math.sqrt(x * x + y * y); t = Math.atan2(y, x); } public double x() { return r * Math.cos(t); } public double y() { return r * Math.sin(t); } public double rho() { return r; } public double theta() { return t; } public void homothétie(double k) { r *= k; } public void translation(double dx, double dy) { double x = x() + dx; double y = y() + dy; r = Math.sqrt(x * x + y * y); t = Math.atan2(y, x); } public void rotation(double a) { t += a; } public String toString() { return r + " $" + t; // ou une autre notation... } }
Fichier Mangenombres.java :
class Mangenombres { int valeur; Mangenombres suivant; Mangenombres(int v) { valeur = v; suivant = null; System.out.print(valeur + " "); } void manger(int n) { if (n % valeur != 0) if (suivant != null) suivant.manger(n); else suivant = new Mangenombres(n); } public static void main(String[] args) { int n = Integer.parseInt(args[0]); Mangenombres deux = new Mangenombres(2); for (int i = 3; i < n; i++) deux.manger(i); } }
Fichier Ensemble.java :
public class Ensemble { static public int N = 32; private int[] tab = new int[N]; private int nbr = 0; public int cardinal() { return nbr; } public boolean contient(int x) { for (int i = 0; i < nbr; i++) if (tab[i] == x) return true; return false; } public void ajout(int x) { if ( ! contient(x)) tab[nbr++] = x; } public String toString() { if (nbr == 0) return "{}"; else { String r = "{" + tab[0]; for (int i = 1; i < nbr; i++) r += "," + tab[i]; return r + "}"; } } static public void main(String[] args) { Ensemble e = new Ensemble(); int x = Lire.entier("x ? "); while (x >= 0) { e.ajout(x); x = Lire.entier("x ? "); } System.out.println("e = " + e); } }
Classe auxiliaire Lire.java :
import java.io.*; public class Lire { static public int entier(String prompt) { System.out.print(prompt); try { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); return Integer.parseInt(in.readLine()); } catch (Exception e) { System.out.println("Erreur de lecture " + e.getMessage()); System.exit(-1); } return 0; } }
Deuxième implémentation des ensembles. Un autre fichier Ensemble.java :
import java.util.Vector; import java.util.Iterator; public class Ensemble { Vector table = new Vector(); public int cardinal() { return table.size(); } public boolean contient(int x) { return table.contains(new Integer(x)); } public void ajout(int x) { if ( ! contient(x)) table.add(new Integer(x)); } public String toString() { if (table.size() == 0) return "{}"; else { Iterator it = table.iterator(); String r = "{" + it.next(); while (it.hasNext()) r += "," + it.next(); return r + "}"; } } static public void main(String[] args) { ... } }