مظفر بگ محمدی دانشگاه ایلام Generics. کدهای عمومی 2 یکی از اهداف OOP ایجاد قابلیت نوشتن برنامه های عمومی با قابلیت استفاده ی مجدد است. کدهای چندریخت تا.

Slides:



Advertisements
Similar presentations
Version Space Search in Prolog سمینار درس : برنامه سازی منطق استاد : دکتر محمد ابراهیم شیری ارایه دهنده : رحمت ا... محمدی.
Advertisements

Generics and the ArrayList Class
Generics and The ArrayList Class
فاکتورهای مهم در ایجاد یک مقاله علمی
Definition. قانون بیز P(b|a) = P(a|b)P(b)/P(a) P(b|a) = P(a|b)P(b)/P(a) این قانون برای استنتاج آماری استفاده می شود. این قانون برای استنتاج آماری استفاده.
Decision Tree.
© 2005 Prentice Hall Inc. All rights reserved. o r g a n i z a t i o n a l b e h a v i o r e l e v e n t h e d i t i o n.
Chapter 14 Generics and the ArrayList Class Copyright © 2010 Pearson Addison-Wesley. All rights reserved.
فایل پردازی در C File based Programming in C. انواع فایل متنی –سرعت بالا –حجم کمتر –امکان دسترسی تصادفی –حفظ امنیت داده ها دودویی (باینری) –امکان باز.
پیدا کردن شواهد علمی. منابع بررسي متون  كتاب ها  گزارش ها  مجله هاي علمي peer reviewed  ايندكس مديكوس  داده هاي الكترونيكي  بانك هاي الكترونيكي.
1 Network Address Translation (NAT). 2 Private Network شبکه خصوصی شبکه ای است که بطور مستقیم به اینترنت متصل نیست در یک شبکه خصوصی آدرس های IP به دلخواه.
CMSC 202 Generics. Nov Generalized Code One goal of OOP is to provide the ability to write reusable, generalized code. Polymorphic code using.
1 بنام خدا زبان برنامه نویسی C (21814( Lecture 14 Structures.
Chapter 14 Generics and the ArrayList Class Slides prepared by Rose Williams, Binghamton University Copyright © 2008 Pearson Addison-Wesley. All rights.
Database Laboratory: Session #4 Akram Shokri. DB-Lab 2 Lab Activity You must already created all tables You have to have inserted proper data in tables.
به نام خدا برنامه سازی سمت سرور (php)
Programming With Java ICS201 1 Chapter 14 Generics and The ArrayList Class.
Introduction to Generics
Data Types Modifiers Base data type Size Sign signed int 2 B unsigned float 4 B short double 8 B long char 1 B.
بسم الله الرحمن الرحیم برنامه سازی پیشرفته ( جاوا ) مدرس : محمد غمگسار
CMSC 202 Polymorphism. 10/20102 Topics Binding (early and late) Upcasting and downcasting Extensibility The final modifier with  methods  classes.
Copyright 2006 Pearson Addison-Wesley, 2008, 2012 Joey Paquet 1 Concordia University Department of Computer Science and Software Engineering SOEN6441 –
CMSC 202 Polymorphism 2 nd Lecture. Aug 6, Topics Constructors and polymorphism The clone method Abstract methods Abstract classes.
Java Generics. Lecture Objectives To understand the objective of generic programming To be able to implement generic classes and methods To know the limitations.
آشنايي با سيستم اعداد.
به نام خدا.
Java Generics.
[c.
تهیه و تنظیم: فاطمه قاسمی دانشگاه صنعتی شریف – پاییز 86
تمرین هفتم بسم الله الرحمن الرحیم درس یادگیری ماشین محمدعلی کیوان راد
بنام خدا زبان برنامه نویسی C (21814( Lecture 12 Selected Topics
SY800 router mode [AD-14-TB ].
ساختمان داده ها جداول درهم سازی
Address: Times New Roman, size 34
ارث بری استفاده ی مجدد از کلاس توسط وراثت
آزمایشگاه پایگاه داده ها قیود در جداول یک پایگاه داده در SQL Server
Odd-even merge sort مرتب سازی.
چگونه بفهمیم آیا ژورنالی ISI است؟ ایمپکت فاکتور دارد یا خیر؟
مظفر بگ محمدی دانشگاه ایلام
ارث بری استفاده ی مجدد از کلاس توسط وراثت
فصل دوم جبر بول.
به نام حق مبحث: ارث بری Inheritance.
CMSC 202 Generics.
SSO Single Sign-on Systems
آموزش و یادگیری Education and Training
آشنایی با پایگاه داده mysql
استفاده از فایلها در جاوا
مدارهای منطقی فصل سوم - خصوصیات توابع سويیچی
CMSC 202 Polymorphism.
ارث بری استفاده ی مجدد از کلاس توسط وراثت
ASP.NET فرناز شریعت.
به نام خدا فصل هفتم وراثت.
تهیه و تنظیم: فاطمه قاسمی دانشگاه صنعتی شریف – پاییز 86
Bucket sort اكرم منوچهري زهرا منوچهري
Ali Karimpour Associate Professor Ferdowsi University of Mashhad
فصل 4. فصل 4 جمع آوری نیازمندیها و تحلیل سیستم : فاز تولید هر نرم افزار با مرحله ای به نام تعریف مسئله شروع می شود. منظور از تعریف مسئله شناخت محیط.
پشته و صف پیوندی Give qualifications of instructors: DAP
تدريس يار: ميثم نظرياني
انجمن جاواکاپ تقدیم می‌کند دوره برنامه‌نويسی جاوا
بسم الله الرحمن الرحیم هرس درخت تصمیم Dr.vahidipour Zahra bayat
مظفر بگ محمدی دانشگاه ایلام
فصل ششم مدارهای ترتیبی.
فرشاد آقابزرگی هوش تجاری
دکتر مظفر بگ محمدی دانشگاه ایلام
مظفر بگ محمدی دانشگاه ایلام
فصل 8 –Process and Deployment
پشته و صف پیوندی Give qualifications of instructors: DAP
مباني كامپيوتر و برنامه سازي Basics of Computer and Programming
مباني كامپيوتر و برنامه سازي Basics of Computer and Programming
CMSC 202 Generics.
Presentation transcript:

مظفر بگ محمدی دانشگاه ایلام Generics

کدهای عمومی 2 یکی از اهداف OOP ایجاد قابلیت نوشتن برنامه های عمومی با قابلیت استفاده ی مجدد است. کدهای چندریخت تا حدودی این کار را انجام می دهند ولی در چندریختی ما به سلسله مراتب محدود هستیم. تعمیم ابزار قدرتمند تری است که اجازه می دهد کدهای عمومی طوری نوشته شوند که با هر کلاسی در هر سلسه مراتبی کار کنند.

3 تعریف کلاس به همراه پارامتر type کلاسی که یک یا چند پارامتر type دارد کلاس تعمیمی یا دارای پارامتر نامیده می شود. پارامتر type در داخل علائم <> قرار داده می شود و به سرآیند کلاس اضافه می گردد. از هر شناسه ای می توان برای مشخص کردن پارامتر type استفاده کرد. ولی معمولاً از حروف بزرگ استفاده می گردد. می توان از پارامتر type مثل هر نوع دیگری در تعریف کلاس (بدنه ی آن) استفاده کرد.

تعمیم Cell 4 public class Cell3 { private T prisoner; public Cell3( T p){ prisoner = p; } public T getPrisoner( ) { return prisoner; } } باید قبل از استفاده ی کلاس در برنامه، نوع پارامتر کلاس مشخص شود.

مثال تعمیم Cell 5 public class Cell3Demo { public static class Cell3 { private T prisoner; public Cell3( T p) { prisoner = p; } public T getPrisoner( ) { return prisoner; } } public static void main (String[ ] args) { // define a cell for PickPockets Cell3 ppCell = new Cell3 ( new PickPocket() ); // define a cell for thieves Cell3 tCell = new Cell3 ( new Thief( ) ); // compiler error if we remove a Thief from PickPocket Cell Thief thief = (Thief)ppCell.getPrisoner( ); }

6 نمی توان از انواع اصلی به عنوان پارامتر استفاده کرد پارامتر type حتماً باید از نوع مرجع (مثل کلاسها و آرایه ها) باشد. لذا نمی تواند int ، double یا char باشد. اما با توجه به پشتیبانی جاوا از بسته بندی خودکار و وجود کلاسهای معادل (مثل Integer و Character) این موضوع محدودیتی ایجاد نمی کند.

7 در همه ی جاهایی که از اسم type استفاده می شود، نمی توان از پارامتر type استفاده کرد. با توجه به تعریف پارامتر نوع در سرآیند کلاس تعمیمی، جاهایی در متدهای این کلاس وجود دارد که استفاده از یک اسم معمولی کلاس مجاز است. اما نمی توانیم که از پارامتر نوع استفاده کنیم. مثلاً نمی توان از پارامتر نوع در ایجاد شی استفاده کرد. T object = new T(); T[] a = new T[10]; استفاده از آرایه ای مثل زیر هم غیر قانونی است. Cell3 [] a = new Cell3 [10];

8 کلاس زوج مرتب تعمیمی (1 از 4)

9 کلاس زوج مرتب تعمیمی (2 از 4)

10 کلاس زوج مرتب تعمیمی (3 از 4)

11 کلاس زوج مرتب تعمیمی (4 از 4)

12 استفاده از کلاس زوج مرتب تعمیمی (1 از 3)

استفاده از کلاس زوج مرتب تعمیمی (2 از 3)

استفاده از کلاس زوج مرتب تعمیمی (3 از 3)

استفاده از کلاس زوج مرتب تعمیمی و بسته بندی خودکار (1 از 3)

استفاده از کلاس زوج مرتب تعمیمی و بسته بندی خودکار (2 از 3)

استفاده از کلاس زوج مرتب تعمیمی و بسته بندی خودکار (3 از 3)

18 استفاده از چندین پارامتر type (1 از 4)

19 استفاده از چندین پارامتر type (2 از 4)

20 استفاده از چندین پارامتر type (3 از 4)

21 استفاده از چندین پارامتر type (4 از 4)

22 استفاده از زوج مرتب دونوعی (1 از 2)

23 استفاده از زوج مرتب دونوعی (1 از 2)

24 محدودیت برای پارامترهای نوع بعضی اوقات لازم است نوع پارامترهای قابل استفاده در کلاس را محدود کنیم. مثلاً ممکن است فقط از کلاسهایی استفاده کنیم که واسط Comparable را پیاده کرده باشند. public class RClass > هر گونه تلاشی برای استفاده از پارامتری که واسط Comparable را پیاده نکرده است، منجر به تولید خطای کامپایل می شود.

مثال 25 // Pair container, but only for those classes that // implement the Comparable interface public class Pair > { private T first; private T second; public T max( ) { if (first.compareTo(second) <= 0) return second; else return first; } // remaining Pair code }

مرتب کردن عمومی 26 public class Sort { public static > void bubbleSort(T[] a) { for (int i = 0; i< a.length - 1; i++) for (int j = 0; j < a.length -1 - i; j++) if (a[j+1].compareTo(a[j]) < 0) { T tmp = a[j]; a[j] = a[j+1]; a[j+1] = tmp; }

27 Bounds for Type Parameters A bound on a type may be a class name Then only descendent classes of the bounding class may be plugged in for the type parameters public class ExClass A bounds expression may contain multiple interfaces and up to one class

Generics and Hierarchies Nov What if we want a somewhat specialized container that assumes the objects it holds are part of a hierarchy so that the container code can assume the existence of a particular method? Let’s look at Animals, Dogs, and Cats class Animal { public void speak(){...}... } class Dog extends Animal {...} class Cat extends Animal {...} We would like to create a container named Zoo to hold some animals that speak.

Zoo Nov If we define the Zoo like this public class Zoo we’ll get a compiler error when we try to invoke the speak( ) method. Not all classes provide a method called speak( ). Only Animals provide speak( ). The solution is to place a bounds on T. The Zoo can only contain Animals or any type that inherits from Animal. public class Zoo The phrase T extends Animal means “Animal or any subtype of Animal”

Generics and Hierarchy Nov For example, suppose we revisit the Animals. Each animal has a weight and a name. Let’s say two Dogs (or two Cats) are the equal if they have the same name and weight. class Animal { private String name; private int weight;...} class Dog extends Animal implements Comparable {... } class Cat extends Animal implements Comparable {... } Since Dog implements comparable it’s clear you can compare Dogs with Dogs, but not with Cats We can use our bubbleSort method with Dogs or with Cats

Sorting Dogs Nov public class DogSort { public static void main( String[ ] args ) { // create an array of Dogs Dog[ ] dogs = new Dog[ 42 ]; // put some dogs in the array // // sort the dogs Sort.bubbleSort( dogs ); // rest of main }

Generics and Hierarchies Nov What happens if we want to sort a class in an inheritance hierarchy, but some ancestor of the class implements comparable, and not the class itself? But suppose we wanted compare all Animals using only their weight. The class definitions would look something like this class Animal implements Comparable {...} class Dog extends Animal {... } class Cat extends Animal {... } Since Animal implements comparable, any two Animals can be compared (albeit only by weight). The problem is now that we can’t use bubbleSort to sort an array of Dogs because Dog doesn’t explicitly implement Comparable (it’s inherited from Animal)

New bubbleSort Nov The solution is to use a “wildcard” when defining bubbleSort public class Sort { public static > void bubbleSort(T[] a) { for (int i = 0; i< a.length - 1; i++) for (int j = 0; j < a.length -1 - i; j++) if (a[j+1].compareTo(a[j]) < 0) { T tmp = a[j]; a[j] = a[j+1]; a[j+1] = tmp; } ? super T is read as “any supertype of T”. Now, because Dog extends Animal which implements Comparable, bubbleSort can be used with an array of Dogs as before.

Nov Pitfall: A Generic Class Cannot Be an Exception Class It is not permitted to create a generic class with Exception, Error, Throwable, or any descendent class of Throwable A generic class cannot be created whose objects are throwable public class GEx extends Exception The above example will generate a compiler error message Copyright © 2008 Pearson Addison-Wesley. All rights reserved

Nov Tip: Generic Interfaces An interface can have one or more type parameters The details and notation are the same as they are for classes with type parameters Copyright © 2008 Pearson Addison-Wesley. All rights reserved

Nov Generic Methods When a generic class is defined, the type parameter can be used in the definitions of the methods for that generic class In addition, a generic method can be defined that has its own type parameter that is not the type parameter of any class A generic method can be a member of an ordinary class or a member of a generic class that has some other type parameter The type parameter of a generic method is local to that method, not to the class Copyright © 2008 Pearson Addison-Wesley. All rights reserved

Nov Generic Methods The type parameter must be placed (in angular brackets) after all the modifiers, and before the returned type public class Utility {... public static T getMidPoint( T[ ] array) { return array[array.length / 2]; } public static T getFirst( T[ ] a ) { return a[0]; }... } Copyright © 2008 Pearson Addison-Wesley. All rights reserved

Generic Methods Nov When one of these generic methods is invoked, the method name is prefaced with the type to be plugged in, enclosed in angular brackets String s = Utility. getMidPoint(arrayOfStrings); double first = Utility. getFirst(arrayOfDoubles);

Nov Inheritance with Generic Classes A generic class can be defined as a derived class of an ordinary class or of another generic class As in ordinary classes, an object of the subclass type would also be of the superclass type Given two classes: A and B, and given G: a generic class, there is no relationship between G and G This is true regardless of the relationship between class A and B, e.g., if class B is a subclass of class A Copyright © 2008 Pearson Addison-Wesley. All rights reserved

Nov A Derived Generic Class (1 of 2) Copyright © 2008 Pearson Addison-Wesley. All rights reserved In this example UnorderedPair overrides equals( ) that was inherited from Pair

Nov A Derived Generic Class (Part 2 of 2) Copyright © 2008 Pearson Addison-Wesley. All rights reserved

Nov Using UnorderedPair (Part 1 of 2) Copyright © 2008 Pearson Addison-Wesley. All rights reserved

Nov Using UnorderedPair (Part 2 of 2) Copyright © 2008 Pearson Addison-Wesley. All rights reserved