جامعة الحسن الثاني الدار البيضاء المدرسة العليا للتكنولوجيا object-oriented programmingWith java البرمجة الشيئية باستخدام جافا من إعداد العربي حسوني Prepared by : Larbi Hassouni Présentation de Java 1 HASSOUNI Larbi : ( المراجع الرئيسيةmain references) Sites : مواقع الويب 1. www.oracle.com (le plus complet et le plus à jour : c'est la principale source) 2. http://deptinfo.unice.fr/~grin/ Livres : كتب 1. Au cœur de Java 2 : Notions fondamentales (Cay S.Horstmann & Gary Cornell) 2. Au cœur de Java2 : Foctions avancées(Cay S.Horstmann & Gary Cornell) 3. BIG Java (Cay S.Horstmann) 4. Java How to program (Deitel) 5. Beginning Java 2 (Ivor Horton) 6. Practical Database Programming with Java (Ying Bai) 7. Data Structures & Algorithms in JAVA (MICHAEL T. GOODRICH, ROBERTO TAMASSIA) 8. Object-Oriented Data Structures Using Java (NELL DALE, DANIEL T.JOYCE, CHIP WEEM) 9. Conception et programmation orientée objet (Bertrand Meyer) 10. Java En Concentré (David Flanagan) HASSOUNI Larbi Présentation de Java 2 JAVA TECHNOLOGY : • • The ava technology is developed by SUN Microsystems™ in 1995 and mainly consists of three components: • A programming language • A platform, software environment in which java programs run. • An API (Application Programming Interface) HASSOUNI Larbi تقنية جافا تم تطوير تقنية جافا بواسطة شركة 1995 سان ميكروسسطم في عام :وتتكون بشكل أساسي من ثالثة مكونات لغة برمجة بيئة برمجية تعمل فيها برامج، منصة .جافا ))واجهة برمجة التطبيقاتAPI Présentation de Java 3 • Java technology is used in many fields of application and particularly in: • Application servers (Java EE) • Cellphones • Smart cards (JME) HASSOUNI Larbi Présentation de Java • يتم استخدام تقنية جافا في العديد من مجاالت :التطبيق وخاصة في خوادم التطبيقاتهاتف خليويبطاقات ذكية- 4 Example of program in JAVA The class code must be saved in a file with the same name (case included) as the class 3 HelloWorld.java 1 All java code must be defined inside a class public class HelloWorld { public static void main(String[ ] args) { for(int i = 1; i <= 5; i++) { if(i%2 == 1){ System.out.println("Hello World !"); 2 } } } 4 The entry point for execution is main() method Compilation : The description of the class is performed inside a block {} } javac HelloWorld.java -------------------- HelloWorld.java javac Execution : java HelloWorld. -------------------- HelloWorld.class java Hello World ! Hello world ! Hello World ! 5 Example of program in JAVA The class code must be saved in a file with the same name (case included) as the class 3 HelloWorld.java 1 يجب تحديد جميع رموز جافا داخل فئة public class HelloWorld { public static void main(String[ ] args) { يتم وصف الفئة داخل }{ كتلة for(int i = 1; i <= 5; i++) { if(i%2 == 1){ System.out.println("Hello World !"); 2 } } } 4 نقطة الدخول للتنفيذ هي الطريقة الرئيسية main() } التحويل البرمجي: javac HelloWorld.java -------------------- HelloWorld.java javac تنفيذ: java HelloWorld. -------------------- HelloWorld.class java Hello World ! Hello world ! Hello World ! 6 ترجمة مصدر البرنامج Compiling source code ➢ Source code cannot be executed directly by a computer ال يمكن تنفيذ مصدر البرنامج مباشرة عن طريق الكمبيوتر ➢ This source code must be translated into a language that the computer (the computer's processor) can understand (native language) يجب ترجمة مصدر البرنامج هذا إلى لغة يستطيع الكمبيوتر (معالج )الكمبيوتر) فهمها (اللغة األم المترجم هو برنامج يقوم بهذه الترجمة ➢ A compiler is a program that performs this translation HASSOUNI Larbi Présentation de Java 7 Compiling in Java → bytecode ترجمة في جافا • In Java, the source code is not translated directly into the language of the computer • It is first translated into a language called "bytecode", the language of a virtual machine (JVM; Java Virtual Machine) defined by Sun • This language (bytecode) is independent of the computer that will run the program HASSOUNI Larbi ال تتم ترجمة الكود المصدري، في جافا مباشرة إلى لغة الكمبيوتر يتم ترجمتها أوالً إلى لغة تسمى "بايث وهي لغة اآللة االفتراضية (جفم، "كود ؛ جاف فرتيال ماشين ) التي حددتها شركة سان هذه اللغة (بايث كود) مستقلة عن الكمبيوتر الذي سيقوم بتشغيل البرنامج Présentation de Java 8 Compilation provides bytecode الترجمة تنتج البايت كود source program برنامج المصدر OneClass.java Program written in Java برنامج مكتوب بلغة جافا Compiler مترجم Program in bytecode is independent of the computer مستقل عن، البرنامج في البايت كود الكمبيوتر HASSOUNI Larbi Bytecode OneClass.class Présentation de Java 9 Compiling with: ترجمة بواسطة javac Sun provides the javac compiler with the JDK )توفر شركة سان المترجم جافاس مع (ج د ك javac HelloWorld.java creates a "HelloWorld.class" file that contains the bytecode, located in the same directory as the file «.java » كلس" يحتوي على رمز البايت كود الموجود في نفس٠يقوم بإنشاء ملف "هلوورلد "جافا٠" المجلد مثل الملف You can designate the file to compile by an absolute or relative path: :يمكن تعيين الملف ليتم ترجمته بواسطة مسار مطلق أو نسبي javac SousRep/HelloWorld.java 10 Java is compiled and interpreted language جافا هو لغة مترجمة ومفسرة • Compilation of a JAVA program: generation of byte-code إنشاء البايت كود:ترجمة برنامج جافا public class Test { public static void main(String[ ] args) { for (int i = 0; i < 10; i++) System.out.println("Hello " + i); } } javac Test.java Source code مصدر الرمز 01100001 11100000 11111010 11101... ... Test.class byte-code بايت كود • The byte code is: – close to a machine language – independent of the execution platform (hardware + OS) :البايت كود هو قريب من لغة اآللة) نظام التشغيل+ مستقل عن منصة التنفيذ (األجهزة- javap –c Test Unassemble Test.class تفكيك 0 iconst_0 1 istore_1 2 goto 30 5 getstatic #10 <Field java.io.PrintStream 8 new #5 <Class java.lang.StringBuffer 11 dup 12 ldc #1 <String "Hello "> …. 27 iinc 1 1 30 iload_1 31 bipush 10 33 if_icmplt 5 36 return 11 Bytecode exécution تنفيذ البايت كود The bytecode must be executed by a JVM "يجب تنفيذ البايت كود بواسطة "جفم This JVM does not exist; it is simulated by a program which: :هاته "جفم" غير موجودة واقعيا ؛ ويتم محاكاتها بواسطة برنامج – reads the instructions (in bytecode) of the .class program, «كالس٠" يقرأ التعليمات (بالبايت كود) الموجودة في البرنامج – translates them into the native language of the computer processor يترجمها إلى اللغة األم لمعالج الكمبيوتر– launch their exécution : يطلق تنفيد التعليمات HASSOUNI Larbi Présentation de Java 12 Running with java : التنفيد بواسطة جافا ♠Sun provides the java program that simulates a JVM "م٠ف٠توفر شركة سان برنامج جافا الذي يحاكي "ج ♠ java HelloWorld Class name: )اسم الفصيلة (او الفئة no suffixmethod : .class: الحقة دون main() of the interprets the bytecode of the HelloWorld class : "يفسر بايت كود الطريقة الرئيسية "مان()" لفئة "هللوورلد ♠ HelloWorld.class must be in the current directory or in one of the locations indicated by an option -classpath or by the CLASSPATH variable كالس" في المجلد الحالي أو في أحد المواقع المشار٠يجب أن تكون "هللووورلد :إليها بواسطة أحد الخيارات ""كالسباث" أو بواسطة متغير "كالسباث13 JVM ♠ Systems that want to be able to run a Java program must provide a JVM يجب على األنظمة التي تريد أن تكون قادرة على تشغيل "٠م٠ف٠برنامج جافا أن توفر "ج ♠ Currently, all systems have a JVM "٠م٠ف٠ جميع األنظمة تحتوي على "ج، حاليًا (Linux, Windows, MacOs,…) HASSOUNI Larbi Présentation de Java 14 The bytecode can be executed by any JVM "٠م٠ف٠يمكن تنفيذ "البايت كود" بواسطة أي "ج Bytecode OneClass.class WRITE ONCE اكتب مرة واحدة RUN EVERYWHERE ونفد في كل مكان JVM in Unix, processor SPARC HASSOUNI Larbi JVM in Windows, processor Intel JVM in Linux, processor Intel JVM in MacOS, processor Motorola 15 Benefits of JVM for Internet " لإلنترنت٠م٠ف٠فوائد "ج ♠ Thanks to its portability, the bytecode of a class can be loaded from a machine in a distant network, and executed by a local JVM ، يمكن تحميل "البايت كود" لفصيلة ما من جهاز في شبكة بعيدة، بفضل قابليته للنقل " محلية٠م٠ف٠وتنفيذه بواسطة "ج ♠ The JVM makes many checks on the bytecode before its execution to ensure that it will not perform any dangerous action. " بإجراء العديد من عمليات التحقق على "البايت كود" قبل تنفيذه٠م٠ف٠تقوم "ج للتأكد من أنه لن يقوم بأي إجراء خطير ♠ Therefore, the JVM brings – flexibility for loading the code to be executed – but also security for the execution of this code :"٠م٠ف٠ تحقق "ج، لذلك المرونة في تحميل الكود المطلوب تنفيذه"ضا األمان لتنفيذ هذا" الكود ً ولكن أي16 The JVM causes some slowness... ... " بعض البطء٠م٠ف٠تسبب"ج ♠ The checks performed on the bytecode and the step of interpreting this bytecode (in the native language of the processor) slow down the execution of Java classes. عمليات التحقق التي يتم إجراؤها على "البايت كود" وعملية تفسيره (في اللغة األصلية ٠للمعالج) تبطئ من تنفيذ فئات جافا ♠ But “Just In Time (JIT)” or “Hotspot” techniques reduce this problem: They allow the instructions that are executed to be translated only once into native code. :لكن تقنيات "جست ان تايم" أو"هوتسبوت" تقلل من هذه المشكلة الى اللغة األصلية للكمبيوتر مرة واحدة، التي يتم تنفيذها،إنها تسمح ترجمة التعليمات .فقط HASSOUNI Larbi Présentation de Java 17 Java and other languages جافا ولغات البرمجة األخرى ♠ Java has become in a few years one of the most used development languages, especially for applications that need great portability or great flexibility on the Internet. خاصة، أصبحت لغة جافا في بضع سنوات واحدة من أكثر لغات التطوير استخدا ًما .للتطبيقات التي تحتاج إلى قابلية كبيرة للنقل أو مرونة كبيرة على اإلنترنت ♠ For applications that require very high execution speed, we still prefer the languages C, C++, or the good old Fortran. (which has libraries widely used for scientific computing) ما زلنا نفضل اللغات "س" أو، بالنسبة للتطبيقات التي تتطلب سرعة تنفيذ عالية جدًا . " أو لغة "فورتران" القديمة++"س )(التي توفر عدة مكتبات تستخدم على نطاق واسع للحوسبة العلمية HASSOUNI Larbi Présentation de Java 18 Java specifications مواصفات جافا ♠ Java is actually: جافا في الواقع – the Java language: لغة جافا http://java.sun.com/docs/books/jls/ – One JVM : "٠م٠ف٠"ج http://java.sun.com/docs/books/vmspec/ – les API : "ء٠ب٠"ا Set of predefined classes spread over several packages مجموعة من الفئات المحددة مسبقًا موزعة على عدة حزم ♠ Java is not standardized; its evolution is managed by the JCP (Java Community Process; http://www.jcp.org/) in which Oracle plays a major role. ب" (عملية مجتمع جافا) ؛٠س٠جافا ليست موحدة ؛ تتم إدارة تطورها بواسطة "ج دورا رئيسيًا ً "حيث تلعب "اوراكل 19 Java platform API (Application Programming Interface) : standard class libraries HASSOUNI Larbi Présentation de Java 20 3 editions of Java ♠ Java SE : Java Standard Edition ; JDK = J2SE Development Kit, also called SDK (Software Development Kit) for some versions Provides compilers, tools, runtimes, and APIs to write, deploy, and run applets and applications ♠ JavaEE : Enterprise Edition which adds the APIs to write applications installed on servers into distributed applications : servlet, JSP, EJB,… ♠ JavaME : Micro Edition, light version of Java for writing embedded programs (smart cards/Java card, mobile phones, etc.) HASSOUNI Larbi Présentation de Java 21 Your development environment ♠ Text editor (NotePad) ♠ Compiler (javac) ♠ Bytecode interpreter(java) ♠ JDK online help (Web browser) ♠ Automatic documentation generator(javadoc) ♠ applet tester(appletviewer) ♠ Debugger(jdb) HASSOUNI Larbi Présentation de Java 22 Your development environment ♠ Many IDEs(Integrated Development Environment) Java Studio Creator Sunsoft JDeveloper Oracle WebSphere Studio Application Developper (VisualAge) IBM JBuilder Borland ♠ Open-source or freeware environments Eclipse www.eclipse.org NetBeans www.netbeans.org BlueJ www.bluej.org Emacs + JDE http://sunsite.auc.dk/jde HASSOUNI Larbi 23 Environment variables ♠ PATH : must include the directory that contains the Java utilities(javac, java, javadoc,…) ♠ CLASSPATH : indicates the user class search path ♠ The beginner must not have a variable CLASSPATH HASSOUNI Larbi Présentation de Java 24 A Point class /** Model a coordinate point x, y */ public class Point extends Object{ private int x, y; public Point(int x, int y) { // a constructor super(); this.x = x; this.y = y; } public double distance(Point p) { // a method return Math.sqrt((this.x-p.x)*(this.x-p.x) + (this.yp.y)*(this.y-p.y)); } public static void main(String[] args) { Point p1 = new Point(1, 2); Point p2 = new Point(5, 1); System.out.println("Distance : " + p1.distance(p2)); HASSOUNI Larbi Présentation de Java 25 } 2 classes in 1 file /** Model a coordinate point x, y */ public class Point { private int x, y; public Point(int x1, int y1) { x = x1; y = y1; } public double distance(Point p) { return Math.sqrt((x-p.x)*(x-p.x) + (y-p.y)*(y-p.y)); } } Point.java file /** Test the Point class */ class TestPoint { public static void main(String[] args) { Point p1 = new Point(1, 2); Point p2 = new Point(5, 1); System.out.println("Distance : " + p1.distance(p2)); } } HASSOUNI Larbi 26 Compiling and running the Point class Compiling the Point.java file javac Point.java provides 2 class files : Point.class and TestPoint.class We launch the execution of the TestPoint class which has a main() method java TestPoint HASSOUNI Larbi Présentation de Java 27 2 classes in 2 files /** Models a point with x, y coordinates */ public class Point { private int x, y; public Point(int x1, int y1) { x = x1; y = y1; } Point.java file public double distance(Point p) { return Math.sqrt((x-p.x)*(x-p.x) + (y-p.y)*(y-p.y)); } } /** To test the Point class */ TestPoint.java file class TestPoint { public static void main(String[] args) { Point p1 = new Point(1, 2); Point p2 = new Point(5, 1); System.out.println("Distance : " + p1.distance(p2)); } } HASSOUNI Larbi Présentation de Java 28 Architecture of a Java source program ♠ Java source program = set of “.java” files ♠ Each “.java” file contains one or more class definitions ♠ At most one public class definition per “.java” file (with file name = public class name) HASSOUNI Larbi 29 Dynamic class loading ♠ During the execution of a Java code, the classes (their bytecode) are loaded into the JVM as needed ♠ A class can be loaded : – from the local machine (the most frequent case) – from another machine, via the network – by any other means (database, etc.) HASSOUNI Larbi Présentation de Java 30 Types of Java Programs You can develop three types of programs with java 1- Independent applications (or stand alone) 2- Applets executed in the environment/JVM of a Web browser and loaded by an HTML page 3- Client/Server applications that run on an application server HASSOUNI Larbi Présentation de Java 31 Independent applications ♠ Application must have a main class – class having a method with the signature public static void main(String[ ] args) Array of strings (equivalent to argc, argv in C) ♠ This method serves as an entry point for the execution of the application ♠ Launching the application is done by executing the main method of the application's main class; for example : java TestPoint launches the interpretation of the code of the main() method of the principal TestPoint class found in the TestPoint.class file HASSOUNI Larbi Présentation de Java 32 Applet ♠ Classe ne possédant pas de méthode main() • Hérite de java.awt.Applet ou javax.swing.JApplet • Son bytecode réside sur un serveur http • Elle est véhiculée vers un client http (navigateur Web) via une page HTML qui contient son url • Lorsqu’un navigateur compatible Java (avec sa propre machine virtuelle java (JVM)) reçoit cette page HTML, il télécharge le code de la classe et l’exécute sur le poste client – l’applet doit posséder un certain nombre de méthodes pour permettre cette exécution : init(), start(), stop(), paint(), destroy() HASSOUNI Larbi Présentation de Java 33 Exemple d’applet import java.awt.*; import java.applet.*; public class Checkerboard extends Applet { /* This applet draws a red-and-black checkerboard. It is assumed that the size of the applet is 160 by 160 pixels. */ public void paint(Graphics g) { int row; // Row number, from 0 to 7 int col; // Column number, from 0 to 7 int x,y; // Top-left corner of square for ( row = 0; row < 8; row++ ) { for ( col = 0; col < 8; col++) { x = col * 80; y = row * 80; if ( (row % 2) == (col % 2) ) g.setColor(Color.red); else g.setColor(Color.black); g.fillRect(x, y, 80, 80); } } // end for row } // end paint() } // end class Checkerboard HASSOUNI Larbi Présentation de Java 34 Exemple de page Web qui contient une applet <html> <head> <title>Utilsation des applets</title> </head> <body> <h1 align = "center">Utilisation des applets</h1> <p align=center> <applet code="Checkerboard.class" height=640 width=640> </applet> </p> </body> <html> HASSOUNI Larbi Présentation de Java 35 HASSOUNI Larbi Présentation de Java 36 Étapes pour l’exécution d’une applet 1. Demande chargement page Web Qui contient une applet Client http Navigateur intégrant une machine virtuelle Java 2. Chargement de la page Web html Serveur html html 3. Demande chargement de l’applet référencée dans la page HTTP .class 4. Chargement du bytecode de La classe .class 3. Exécution de l’applet dans la JVM du client Présentation de Java HASSOUNI Larbi 37 Exécution de l'applet ♠ Le navigateur a sa propre machine virtuelle ♠ Un programme Java spécial démarré par le navigateur va lancer certaines méthodes de la classe Applet : init(), start(), stop(), destroy(), paint() ♠ init() est exécuté seulement quand l’applet est lancée pour la première fois ♠ paint() dessine l'applet dans la page Web HASSOUNI Larbi Présentation de Java 38 Utilité des applets ♠ Les applets permettent de faire des pages Web plus riches (grâce aux possibilités offertes par Java) ♠ La page Web peut contenir – des animations ou des mises en forme complexes pour mettre en valeur certaines informations – des résultats de calculs complexes – des informations « dynamiques » (pas connues au moment où la page Web statique est créée) trouvées en interrogeant une base de données – …. HASSOUNI Larbi Présentation de Java 39