PB à toute heure et à tout moment. (à parcourir avec modération)

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.

#1 30-08-2007 08:10:03

shahin  
Modérateur
Award: bf
Lieu: val de marne
Date d'inscription: 26-09-2006
Messages: 938
Pépites: 8,675,050,269
Banque: 16,218,225,127,617

L'objet en Java par l'exemple

Bon supposez que vous voulez additionner 1  et 2.
Naïvement vous écririez :

java a écrit:

int result;
result = 1+2;
System.out.println("trois = " + result);

Qu'est ce qui ne va pas ?
-> vous n'avez pas utilisé la POO : MAUVAIS

Réessayons :

Integer one, two, three;
   
one = new Integer (1);
two = new Integer (2);
three = new Integer (one.intValue() + two.intValue());
System.out.println("three = " + three);

Tout de suite, c'est plus beau

Mais on peut faire mieux, notamment transformer les entiers en String et vice-versa (il y a des pros du Java qui font ça naturellement)

java.math.BigInteger bigTwo = new java.math.BigInteger (two.toString());
three = new Integer (Integer.parseInt
        (bigTwo.add(java.math.BigInteger.ONE).toString()));
System.out.println("big three = " + three);

Enfin un programme simple et lisible

Dernière modification par shahin (30-08-2007 08:57:48)


never let people work on more than one thing at once.

Hors ligne

 

#2 30-08-2007 09:22:07

Nephtis  
Bienfaiteur du site
Award: bf
Lieu: Longjumeau
Date d'inscription: 29-06-2007
Messages: 665
Pépites: 17,189,873,958
Banque: 9,223,372,036,854,776,000

Re: L'objet en Java par l'exemple

Ce qui ne va pas en fait dans le code c'est que le compilateur est obligé de choisir la classe avec laquelle il va devoir interpreter les chiffres (on va devoir perdre quelques milliemes de secondes )

Et puis au passage, on peut faire la même remarque sur l'instantiation des String. A la longue il vaudra mieux déclarer une variable :

Code: java

String mon_resultat = "trois = "


Pour ensuite l'utiliser lors de l'affichage :

Code: java

System.out.println(mon_resultat + result);


Mais bon ça c'est vraiment quand on arrive avec un programme assez lourd qui peut tourner pendant plusieures minutes, voir plusieures heures (moi ça m'arrive, heuresement que la partie Salle de jeux existe dans PbaDonf ) alors un petit alègement au niveau du code peut permetre de gagner quelques minutes d'execution.


Qui sème des problèmes, récolte des réponses.
PB 6.5 || ASE 12.5.4 || XP SP3

Hors ligne

 

#3 30-08-2007 09:46:36

shahin  
Modérateur
Award: bf
Lieu: val de marne
Date d'inscription: 26-09-2006
Messages: 938
Pépites: 8,675,050,269
Banque: 16,218,225,127,617

Re: L'objet en Java par l'exemple

Nephtis a écrit:

Ce qui ne va pas en fait dans le code c'est que le compilateur est obligé de choisir la classe avec laquelle il va devoir interpreter les chiffres (on va devoir perdre quelques milliemes de secondes )

Pas trop compris.
Mais c'est vrai qu'on pourrait faire une classe abstraite Addition et 3 classes concrètes (correspondant à mes 3 algo) + une classe factory qui choisirai l'objet ad hoc en fonction d'un fichier de configuration xml
http://c2.com/cgi/wiki?FactoryMethodPattern

Ou comment faire une addition en 200 lignes de code


Quid de

Code: java

StringBuffer buff = new StringBuffer (30).append("trois = ");
System.out.println(buff.append(result));

never let people work on more than one thing at once.

Hors ligne

 

#4 30-08-2007 10:03:25

Nephtis  
Bienfaiteur du site
Award: bf
Lieu: Longjumeau
Date d'inscription: 29-06-2007
Messages: 665
Pépites: 17,189,873,958
Banque: 9,223,372,036,854,776,000

Re: L'objet en Java par l'exemple

shahin a écrit:

Nephtis a écrit:

Ce qui ne va pas en fait dans le code c'est que le compilateur est obligé de choisir la classe avec laquelle il va devoir interpreter les chiffres (on va devoir perdre quelques milliemes de secondes )

Pas trop compris.

Quand tu ecris 1+2 il faut que le compilateur considère les chiffre '1' et '2' comme des entier pour nous. Mais le probleme c'est que pour des entiers on peut les stocker de diverses manières (int, Integer).

Je sais pas trop comment marchent les compilateurs mais je suppose donc qu'il doit se rajouter une déclaration implicite du type int i1 = 1 et une ligne de code en plus c'est un minuscule espace temps perdu lors de l'execution (si cela fonctionne bien de cette manière évidemment)


Qui sème des problèmes, récolte des réponses.
PB 6.5 || ASE 12.5.4 || XP SP3

Hors ligne

 

#5 30-08-2007 11:38:57

shahin  
Modérateur
Award: bf
Lieu: val de marne
Date d'inscription: 26-09-2006
Messages: 938
Pépites: 8,675,050,269
Banque: 16,218,225,127,617

Re: L'objet en Java par l'exemple

shahin a écrit:

Ou comment faire une addition en 200 lignes de code

Allez, c'est parti sur le thème "choisir la classe avec laquelle il va devoir interpreter les chiffres ":

Code: java

package fr.galejade;
public abstract class Addition {
  abstract int add (int a, int b);
}

Code: java

package fr.galejade;

public class SimpleAddition extends Addition {

  int add(int a, int b) {
    return a + b;
  }
}

Code: java

package fr.galejade;
public class ObjectAddition1 extends Addition {
  int add(int a, int b) {
    Integer i, j, result;
    i = new Integer (a);
    j = Integer.decode(b+"");
    result = new Integer (i.intValue() + j.intValue());
    return result.intValue();
  }
}

Code: java

package fr.galejade;
public class ObjectAddition2 extends Addition {

  int add(int a, int b) {
    java.math.BigInteger b1 = new java.math.BigInteger (a+"");
    java.math.BigInteger b2 = new java.math.BigInteger (b+"");
    Integer result;
    result = new Integer (Integer.parseInt(b1.add(b2).toString()));
    return result.intValue();
  }
}

Code: java

package fr.galejade;

public class AdditionFactory {
  private static final AdditionFactory singleton
                = new AdditionFactory ();

  private AdditionFactory() {
  }
  
  public static AdditionFactory getInstance()
  {
    return singleton;
  }
  
  public Addition get ()
  {
    String classAddition;
    Addition addition=null;
    /* Lire la classe à créer dans un p... de fichier xml
     * à faire
     */
    classAddition = "fr.galejade.SimpleAddition";
    try {
      addition =  (Addition)Class.forName(classAddition)
                                                 .newInstance();
    } catch (InstantiationException e) {
      e.printStackTrace();
    } catch (IllegalAccessException e) {
      e.printStackTrace();
    } catch (ClassNotFoundException e) {
      e.printStackTrace();
    }
    return addition;
  }
}

Last but not least :

Code: java

    int un=1;
    int deux = 2;
    int result;
    AdditionFactory additionFactory = AdditionFactory.getInstance();
    Addition addition = additionFactory.get();
    result = addition.add(un, deux);
    
    StringBuffer buff = new StringBuffer (30).append("trois = ");
    System.out.println(buff.append(result));

Et c'est dans le poche (comme dirait Jane Birkin)


never let people work on more than one thing at once.

Hors ligne

 

#6 30-08-2007 11:55:35

shahin  
Modérateur
Award: bf
Lieu: val de marne
Date d'inscription: 26-09-2006
Messages: 938
Pépites: 8,675,050,269
Banque: 16,218,225,127,617

Re: L'objet en Java par l'exemple

Nephtis a écrit:

Mais le probleme c'est que pour des entiers on peut les stocker de diverses manières (int, Integer)

Un entier c'est int.
Integer est juste un wrapper (une enveloppe).

Je te le fais en powerscript. En pb, les constructeurs ne sont pas paramétrés alors j'ai du ruser.

Code: pb

forward
global type nvo_int from nonvisualobject
end type
end forward

global type nvo_int from nonvisualobject
end type
global nvo_int nvo_int

type variables
private int ii_value
end variables

forward prototypes
public subroutine of_set (integer ai_val) throws exception
public function integer intvalue ()
public function string tostring ()
end prototypes

public subroutine of_set (integer ai_val) throws exception;
if isNull (ii_value) then
  ii_value = ai_val
else
  Exception ex
  ex = create Exception
  ex.setMessage("this object cannot be modified")
  throw ex
end if
end subroutine

public function integer intvalue ();return ii_value
end function

public function string tostring ();return string (ii_value)
end function

event constructor;setNull(ii_value)
end event

on nvo_int.create
call super::create
TriggerEvent( this, "constructor" )
end on

on nvo_int.destroy
TriggerEvent( this, "destructor" )
call super::destroy
end on

Dernière modification par shahin (30-08-2007 12:05:54)


never let people work on more than one thing at once.

Hors ligne

 

#7 30-08-2007 12:01:12

Chrnico  
N2I Power
Award: bf
Lieu: Vanves
Date d'inscription: 05-06-2007
Messages: 1206
Pépites: 12,884,901,943
Banque: 9,223,372,036,854,776,000
Site web

Re: L'objet en Java par l'exemple

shahin a écrit:

Ou comment faire une addition en 200 lignes de code

Heu, si je veux ajouter 1 jours et 5 heure à la date et l'heure du jour c'est combien de lignes ?


Tu dois donc tu peux (Kant)

Tu peux donc tu dois (N2i)
www.n2i.fr

Hors ligne

 

#8 30-08-2007 12:03:01

Chrnico  
N2I Power
Award: bf
Lieu: Vanves
Date d'inscription: 05-06-2007
Messages: 1206
Pépites: 12,884,901,943
Banque: 9,223,372,036,854,776,000
Site web

Re: L'objet en Java par l'exemple

shahin a écrit:

Ou comment faire une addition en 200 lignes de code

Je vous laisse imaginer combien de lignes il faut pour ajouter 3 jours et 5 heures à la date/heure du jour...


Tu dois donc tu peux (Kant)

Tu peux donc tu dois (N2i)
www.n2i.fr

Hors ligne

 

#9 30-08-2007 12:12:18

shahin  
Modérateur
Award: bf
Lieu: val de marne
Date d'inscription: 26-09-2006
Messages: 938
Pépites: 8,675,050,269
Banque: 16,218,225,127,617

Re: L'objet en Java par l'exemple

Chrnico a écrit:

shahin a écrit:

Ou comment faire une addition en 200 lignes de code

Je vous laisse imaginer combien de lignes il faut pour ajouter 3 jours et 5 heures à la date/heure du jour...

C'est plus cher, il faut pas avoir d'oursins dans le poche

Code: java

new GregorianCalendar().add(Calendar.DATE, 3).add(Calendar.HOUR_OF_DAY, 5)

never let people work on more than one thing at once.

Hors ligne

 

#10 30-08-2007 12:41:01

rincevent  
Modérateur
Award: bf
Lieu: Belgique
Date d'inscription: 06-02-2007
Messages: 722
Pépites: 100,002,023
Banque: 0

Re: L'objet en Java par l'exemple

halalala quand je pense qu'il y a des intégristes qui prétendent vraiment que la programmation ça devrait être comme ça...

perso le seul truc que je fais vraiment gaffe à optimiser c'est les SQL's, je pense que dans 99.9999999% des cas d'opérations qui durent longtemps c'est du SQL et comme la DB est une ressource partagée entre plusieurs users et différents programme on doit rester performant et pas trop gourmand.

par contre les macs qui font des cacas nerveux à la vue d'un CAST() dans du code .NET ou qui crisent parceque on utilise la dot notation au lieu de Getitem ou autres exemples du genre ils me font bien rire, ils prennent 3 plombes et 10 fois plus de lignes de code pour arriver au même résultat et ne se rendent pas compte qu'ils viennent de gaspiller le pognon de la boite en réfléchissant pendant trop longtemps à la meilleur façon de... gagner 1/10 de seconde au lancement d'une fenêtre...

moi je dis la recherche de performance OUI mais d'abord où c'est vraiment nécéssaire et rentable.


http://img114.imageshack.us/img114/8519/userbar175801nb.gif
Pourquoi ne puis-je vivre comme n'importe quel être humain ? Pourquoi mon destin est-il de ne pouvoir cesser de me battre ?

Hors ligne

 

#11 30-08-2007 12:53:17

shahin  
Modérateur
Award: bf
Lieu: val de marne
Date d'inscription: 26-09-2006
Messages: 938
Pépites: 8,675,050,269
Banque: 16,218,225,127,617

Re: L'objet en Java par l'exemple

rincevent a écrit:

halalala quand je pense qu'il y a des intégristes qui prétendent vraiment que la programmation ça devrait être comme ça...

Et oui, maheureusement

rincevent a écrit:

perso le seul truc que je fais vraiment gaffe à optimiser c'est les SQL's

100% d'accord

rincevent a écrit:

...et ne se rendent pas compte qu'ils viennent de gaspiller le pognon de la boite en réfléchissant pendant trop longtemps à la meilleur façon de... gagner 1/10 de seconde au lancement d'une fenêtre...

Bien vu.
Cependant, réfléchir à faire du code lisible par un être humain, et maintenable est fondamental.


never let people work on more than one thing at once.

Hors ligne

 

#12 30-08-2007 12:58:54

Nephtis  
Bienfaiteur du site
Award: bf
Lieu: Longjumeau
Date d'inscription: 29-06-2007
Messages: 665
Pépites: 17,189,873,958
Banque: 9,223,372,036,854,776,000

Re: L'objet en Java par l'exemple

shahin a écrit:

Cependant, réfléchir à faire du code lisible par un être humain, et maintenable est fondamental.

Bien sur mais entre

int result;
result = 1+2;
System.out.println("trois = " + result);

et

java.math.BigInteger bigTwo = new java.math.BigInteger (two.toString());
three = new Integer (Integer.parseInt
        (bigTwo.add(java.math.BigInteger.ONE).toString()));
System.out.println("big three = " + three);

on voit tout de suite le plus lisible


Qui sème des problèmes, récolte des réponses.
PB 6.5 || ASE 12.5.4 || XP SP3

Hors ligne

 

#13 30-08-2007 13:03:37

foon  
N2iGeek + MangasGeek = foon
Award: bf
Lieu: Bonchamp-Lès-Laval
Date d'inscription: 28-02-2007
Messages: 2486
Pépites: 85
Banque: 9,223,372,036,854,776,000

Re: L'objet en Java par l'exemple

rincevent a écrit:

perso le seul truc que je fais vraiment gaffe à optimiser c'est les SQL's

J'ajouterai aussi qu'en client/serveur, il faut faire attention au trafic réseau en limitant les aller-retour entre les postes client et le serveur au maximum (surtout quand les serveurs sont à grande distance du poste client).
Les gros tuyaux, c'est pas donné et ça sature vite


Seuls ceux qui ne font rien ne font jamais d'erreurs
http://www.nerdtests.com/images/badge/163124fb7fb459a3.gif

Hors ligne

 

#14 30-08-2007 13:04:57

shahin  
Modérateur
Award: bf
Lieu: val de marne
Date d'inscription: 26-09-2006
Messages: 938
Pépites: 8,675,050,269
Banque: 16,218,225,127,617

Re: L'objet en Java par l'exemple

C'était de l'humour Nephtis.

Et aussi répondre à une question


never let people work on more than one thing at once.

Hors ligne

 

#15 30-08-2007 13:16:09

Nephtis  
Bienfaiteur du site
Award: bf
Lieu: Longjumeau
Date d'inscription: 29-06-2007
Messages: 665
Pépites: 17,189,873,958
Banque: 9,223,372,036,854,776,000

Re: L'objet en Java par l'exemple

shahin a écrit:

C'était de l'humour Nephtis.

Et aussi répondre à une question

Oui c'est vrai que poche me surprends bien parfois


Qui sème des problèmes, récolte des réponses.
PB 6.5 || ASE 12.5.4 || XP SP3

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22