23
ההההה הההההה הJava ההההה ההההההה ההההההה ההה ההההה הההההה ההההה...89-211 םםםםם םםםםם2 םםםםם12 הההה ה הההה ה הההה הGroovy Groovy ההההה הההה'ה םםםםם םםםםם םםםםם םםםםם2 2 89-211 89-211 ההההה הההה12 הה"ה2009-2010

מבוא ל Groovy

  • Upload
    zamora

  • View
    47

  • Download
    0

Embed Size (px)

DESCRIPTION

מבוא ל Groovy. תכנות מתקדם 2 89-211 תרגול מספר 12 תש"ע 2009-2010. אליהו חלסצ'י. הקדמה. Groovy היא שפת סקריפט לפלטפורמת Java שפות סקריפט מאפשרות קלות וגמישות בתכנות הן דינאמיות ולכן יש פחות הגבלות משפה רגילה מאפשרות פיתוח מהיר יותר (פחות קוד לכתוב) על חשבון זמן ריצה - interpreter - PowerPoint PPT Presentation

Citation preview

Page 1: מבוא ל  Groovy

הקדמהJavaהבדלים מ

צעדים ראשוניםדוגמאות קוד

סיכום תרגולי הקורס...

– תרגול 2 תכנות מתקדם 89-21112

מבוא ל

GroovyGroovyמבוא ל מבוא ל

אליהו חלסצ'י

89-21189-211 22תכנות מתקדם תכנות מתקדם 12תרגול מספר

2009-2010תש"ע

Page 2: מבוא ל  Groovy

הקדמהJavaהבדלים מ

צעדים ראשוניםדוגמאות קוד

סיכום תרגולי הקורס...

– תרגול 2 תכנות מתקדם 89-21112

מבוא ל

הקדמה•Groovy היא שפת סקריפט לפלטפורמת Javaשפות סקריפט מאפשרות קלות וגמישות בתכנות•הן דינאמיות ולכן יש פחות הגבלות משפה רגילה •מאפשרות פיתוח מהיר יותר )פחות קוד לכתוב(•interpreterעל חשבון זמן ריצה - • עברו בהצלחה Ruby או Pythonשפות כגון •

Javaלפלטפורמה של –Jython, JRuby

אז למה יש לנו צורך ללמוד עוד שפה??•

Page 3: מבוא ל  Groovy

הקדמהJavaהבדלים מ

צעדים ראשוניםדוגמאות קוד

סיכום תרגולי הקורס...

– תרגול 2 תכנות מתקדם 89-21112

מבוא ל

הקדמהgroovyלא צריך ללמוד שפה חדשה כדי לתכנת ב

•Jython ו JRubyנותנות הרגשה של Python ו Ruby

הן גם משתמשות בספריות הקוד שלהן...––Groovy נותנת הרגשה של Javaללא הגבלות

•Groovyמבדילה עצמה מהאחרות באמצעות התחביר שלה–Javaוהיכולת להשתמש בספריות הסטנדרטיות של –

באופן טבעי

Page 4: מבוא ל  Groovy

הקדמהJavaהבדלים מ

צעדים ראשוניםדוגמאות קוד

סיכום תרגולי הקורס...

– תרגול 2 תכנות מתקדם 89-21112

מבוא ל

הקדמהאין צורך יותר בקימפול•

dynamic typesמתאפשר שימוש ב •

תחביר עם פחות אילוצים•

Javaניתן להריץ סקריפטים בתוך אפליקציות •

•Groovy מגיעה עם interpreter ומריץ אותוbyte code את הקוד ל בזמן ריצהמפרש –

תומכת גם בקימפול הקוד לפני Scalaתזכורת: •ריצה, ולכן היא סקלבילית גם לתוכנית גדולות...

Page 5: מבוא ל  Groovy

הקדמהJavaהבדלים מ

צעדים ראשוניםדוגמאות קוד

סיכום תרגולי הקורס...

– תרגול 2 תכנות מתקדם 89-21112

מבוא ל

Javaהבדלים מ

מפורש לבאים:importלא צריך לבצע • )לפי תוכן(equals== זה •הגדרת מערך:•

במקום–יש לכתוב–

:forלולאות •במקום–הבאים אפשריים:–

• java.io.*• java.lang.*• java.math.BigDecimal• java.math.BigInteger• java.net.*• java.util.*• groovy.lang.*• groovy.util.*

int[] a = {1,2,3};

int[] a = [1,2,3[

for (int i=0; i < len; i++) {...}

for (i in 0..len-1) {...} for (i in 0..<len) {...} len.times {...}

Page 6: מבוא ל  Groovy

הקדמהJavaהבדלים מ

צעדים ראשוניםדוגמאות קוד

סיכום תרגולי הקורס...

– תרגול 2 תכנות מתקדם 89-21112

מבוא ל

Javaהבדלים מ

אופציונאליתreturnהמילה ••thisמתוך מתודה סטטית מתכוון למחלקה ברירת המחדל למתודות ולמשתני מחלקה – •

publicJava אותה המשמעות כמו ב protectedל •בינתיים לא ניתן ליצור מחלקה בתוך מחלקה•

)!(closuresאך יש תמיכה ב –

•Groovy לא בודק חתימה של throwsלמתודה לבין checkedמשום שאין הבדל מבחינתו בין –

unchecked exceptions

Page 7: מבוא ל  Groovy

הקדמהJavaהבדלים מ

צעדים ראשוניםדוגמאות קוד

סיכום תרגולי הקורס...

– תרגול 2 תכנות מתקדם 89-21112

מבוא ל

Java ולא ב Groovyקיים ב

Closuresתמיכה ב •תחביר מיוחד לרשימות ומפות•תמיכה בביטויים רגולריים כחלק מתחביר השפה•dynamic typing וב staticתמיכה גם ב •

לא צריך להצהיר על טיפוס–איטרציה פולימורפית––Switch Caseפולימורפיים

ניתן להטמיע ביטויים בתוך מחרוזות•לא צריך לשרשר מחרוזות וביטויים בעצמנו–

Page 8: מבוא ל  Groovy

הקדמהJavaהבדלים מ

צעדים ראשוניםדוגמאות קוד

סיכום תרגולי הקורס...

– תרגול 2 תכנות מתקדם 89-21112

מבוא ל

Java ולא ב Groovyקיים ב

JDKנוספו המון מתודות עזר ל •

Beansקל יותר לכתוב •–Beans הן מחלקות רגילות המשמשות כ struct getters ו setters צריך להגדיר Java beanב – לא צריך, נעשה אוטומטיתGroovy beanוב –

צריך לוודא תחילה שהאובייקט לא ifבמשפטי •nullאינו

functional programmingתמיכה ב • { )def fac)n( { n == 0 ? 1 : n * fac)n - 1לדוג' –

Page 9: מבוא ל  Groovy

הקדמהJavaהבדלים מ

צעדים ראשוניםדוגמאות קוד

סיכום תרגולי הקורס...

– תרגול 2 תכנות מתקדם 89-21112

מבוא ל

צעדים ראשוניםאתר רשמי:•

–http://groovy.codehaus.org/

הוראות התקנה:•–http://groovy.codehaus.org/Installing+Groovy

:eclipse ל plug-inהתקנת ה •–http://dist.springsource.org/release/GRECLIPSE/e3.5/

יצירת פרויקט חדש:•–Filenewproject…–GroovyGroovy projectאו ע"י–

Page 10: מבוא ל  Groovy

הקדמהJavaהבדלים מ

צעדים ראשוניםדוגמאות קוד

סיכום תרגולי הקורס...

– תרגול 2 תכנות מתקדם 89-21112

מבוא ל

צעדים ראשונים

srcnewfileניצור קובץ חדש ע"י •

myTest.groovyנקרא לו בשם •

כבר ניתן לראות ש:•...main אין צורך ב scriptב –

–Dynamically Typed

–xיכול להיות כל טיפוס

x="Hello World!"

println x

x = 1

println x

x = new java.util.Date()

println x

x = -3.149

println x

x = false

println x

Page 11: מבוא ל  Groovy

הקדמהJavaהבדלים מ

צעדים ראשוניםדוגמאות קוד

סיכום תרגולי הקורס...

– תרגול 2 תכנות מתקדם 89-21112

מבוא ל

רשימות ומפות

פעולות נפוצות•

list=[]

list.add ("Hello")

list.add ("World!")

list+=['today','is',new Date()]

println list.join(' ')

println list[0]

println list[-1]

println list.size()

list = [4, 5, 6, 6, 4, 7, 2]

println list.count(6)

println list.sort()

map=[:]

map.put ("hello", "World!")

map+=['today is':new Date(), 89:210, 'advanced':'programming']

println map['hello']

println map.hello

map[89]=211

println map[89]

println map.size()

Page 12: מבוא ל  Groovy

הקדמהJavaהבדלים מ

צעדים ראשוניםדוגמאות קוד

סיכום תרגולי הקורס...

– תרגול 2 תכנות מתקדם 89-21112

מבוא ל

closures

•Closure מזכיר מחלקה אנונימית פנימית אלא שהוא בעצם מתודה אחת הניתנת לקריאה–הוא יכול לקבל פרמטרים )כמה שנרצה(–itclosure = { param -> println("hello ${param}") }ללא פרמטרים אפשר לעשות שימוש ב –

closure.call("world!")

closure = { greeting, name -> println(greeting + name) }

closure.call("hello ", "world!")

closure = { println "hello " + it }

closure.call("world!")

Page 13: מבוא ל  Groovy

הקדמהJavaהבדלים מ

צעדים ראשוניםדוגמאות קוד

סיכום תרגולי הקורס...

– תרגול 2 תכנות מתקדם 89-21112

מבוא ל

closures

Closuresדוגמאות למעבר על אוספים באמצעות forאפשר באמצעות לולאת •אפשר באמצעות מתודות•

המקבלותeachעזר כגון closureכפרמטר

•it,כמו גם הפרמטרים יכולים להיות מכל טיפוס

)איטרציה פולימורפית(

?closure באמצעות mapכיצד נעבור על •

for(x in list){

sum+=x

}

list.each {sum+=it}

list.findAll {it>5}.each{sum+=it}

list.findAll {x -> if(x>5) sum+=x}

list.findAll {if(it>5) sum+=it}

println list.every {it>5}

println list.any {it>5}

map.each{key,val -> println "$key = $val"}

Page 14: מבוא ל  Groovy

הקדמהJavaהבדלים מ

צעדים ראשוניםדוגמאות קוד

סיכום תרגולי הקורס...

– תרגול 2 תכנות מתקדם 89-21112

מבוא ל

Dynamic Typing

קודם ראינו השמה של טיפוסים שונים לאותו ה •x

}class Movieניתן גם להניח מה יש לאובייקט, לדוגמא:•

int length

String name

}

class Book{

String name

String author

}

def myFavorite(thing){

println "my favorit "+thing.class +" is "+ thing.name

}

movie= new Movie(length:124, name:"Star Wars")

book = new Book(name:"The War of the Worlds", author:"H.G. Wells")

myFavorite(movie)

myFavorite(book)

Page 15: מבוא ל  Groovy

הקדמהJavaהבדלים מ

צעדים ראשוניםדוגמאות קוד

סיכום תרגולי הקורס...

– תרגול 2 תכנות מתקדם 89-21112

מבוא ל

Dynamic Typing

, הפרמטר לא חייב switch caseגם במבנה •להיות מטיפוס מסוים...

def x = 1.23

def result = ""

switch ( x ) {

case "foo":

result = "found foo"

// lets fall through

case "bar":

result += "bar"

case [4, 5, 6, 'inList']:

result = "list"

break

case 12..30:

result = "range"

break

case Integer:

result = "integer"

break

case Number:

result = "number"

break

default:

result = "default"

}

println result == "number"

Page 16: מבוא ל  Groovy

הקדמהJavaהבדלים מ

צעדים ראשוניםדוגמאות קוד

סיכום תרגולי הקורס...

– תרגול 2 תכנות מתקדם 89-21112

מבוא ל

ביטויים רגולריים

?Matcher ואת Patternזוכרים את •Matcher~= מחזיר מופע של •בהקשר בוליאני מחזיר אמת אם קיים מופע •

לתבנית~== בודק התאמה לתבנית•

)(matches.בעצם קורא ל –

קיימות מתודות עזר•–replaceAll–replaceFirstועוד–

str = "89211"

println str ==~ /\d+/

str = "AGCGTTCGAG GCTAGATTAA"

if (str =~ 'TT'){

println 'found a match'

}

ptrn = ~"TT"

nStr = (str =~ ptrn).replaceAll('GC')

println nStr

Page 17: מבוא ל  Groovy

הקדמהJavaהבדלים מ

צעדים ראשוניםדוגמאות קוד

סיכום תרגולי הקורס...

– תרגול 2 תכנות מתקדם 89-21112

מבוא ל

beans

מספיק לכתוב רק את המאפייניםGroovyב •

קיימים אוטומטית...getters וה settersה •

publicכאמור ברירת המחדל היא•

} class Fooדוגמא:•

// read only property

final String name = "John"

// property with public getter and protected setter

Integer amount

protected void setAmount(Integer amount) { this.amount = amount }

// dynamically typed property

def cheese

}

Page 18: מבוא ל  Groovy

הקדמהJavaהבדלים מ

צעדים ראשוניםדוגמאות קוד

סיכום תרגולי הקורס...

– תרגול 2 תכנות מתקדם 89-21112

מבוא ל

beans

:Groovyב •

class Customer {

// properties

Integer id

String name

Date date

// sample code

static void main(args) {

def customer = new Customer(id:1, name:"Bean", date:new Date())

println("Hello ${customer.name}")

println("your id is "+customer.getId())

}

}

Page 19: מבוא ל  Groovy

הקדמהJavaהבדלים מ

צעדים ראשוניםדוגמאות קוד

סיכום תרגולי הקורס...

– תרגול 2 תכנות מתקדם 89-21112

מבוא ל

beans

היינו חייביםJavaב •importלהוסיף ––Setters ו Gettersלאתחל את המאפיינים–

אחד אחד...

import java.util.Date;

public class Customer {

// properties

private Integer id;

private String name;

private Date date;

public Integer getId() {

return this.id;

}

public String getName() {

return this.name;

}

public Date getDob() {

return this.date;

}

public void setId(Integer id) {

this.id = id;

}

public void setName(String name) {

this.name = name;

}

public void setDob(Date date) {

this.date = date;

}

// sample code

public static void main(String[] args) {

Customer customer = new Customer();

customer.setId(1);

customer.setName("Bean");

customer.setDob(new Date());

System.out.println("Hello " + customer.getName());

System.out.println("your id is "+customer.getId());

}

}

Page 20: מבוא ל  Groovy

הקדמהJavaהבדלים מ

צעדים ראשוניםדוגמאות קוד

סיכום תרגולי הקורס...

– תרגול 2 תכנות מתקדם 89-21112

מבוא לסיכום תרגולי הקורס

סמסטר ב':סמסטר ב':כלים שימושיים•

–Mercurial–Maven–Tomcat , Jetty

webתקשורת ו •–Sockets–Servlets, JSP

עבודה מול מסד נתונים•Hibernateע"י שכבת –

web servicesארכיטקטורות של •–Rest, Comet

כשירותJavaהרצת תוכנית •–Service ,Daemon

שפות חדשות•Scalaמבוא ל –Groovyמבוא ל –

סמסטר א':סמסטר א':Javaשפת •

Javaהיכרות עם –Javaתחביר ––Java containers

•Shared librariesכלים שימושיים•

–SVN, ANT, Junitתכנות מקבילי•

Threadsמבוא ל –Threadsנושאים מתקדמים ב –

•Event driven GUI – SWT•Design Patterns

–Creational, Structural, Behavioral

•Spring Framework גדולהDesignדוגמת •

כבר עברה לה שנה... בואו נראה מה למדנו:

Page 21: מבוא ל  Groovy

הקדמהJavaהבדלים מ

צעדים ראשוניםדוגמאות קוד

סיכום תרגולי הקורס...

– תרגול 2 תכנות מתקדם 89-21112

מבוא לסיכום תרגולי הקורס

סמסטר ב':סמסטר ב':כלים שימושיים•

–Mercurial–Maven–Tomcat , Jetty

webתקשורת ו •–Sockets–Servlets, JSP

עבודה מול מסד נתונים•Hibernateע"י –

web servicesארכיטקטורות של •–Rest, Comet

כשירותJavaהרצת תוכנית •–Service ,Daemon

שפות חדשות•Scalaמבוא ל –Groovyמבוא ל –

סמסטר א':סמסטר א':Javaשפת •

Javaהיכרות עם –Javaתחביר ––Java containers

•Shared librariesכלים שימושיים•

–SVN, ANT, Junitתכנות מקבילי•

Threadsמבוא ל –Threadsנושאים מתקדמים ב –

•Event driven GUI – SWT•Design Patterns

–Creational, Structural, Behavioral

•Spring Framework גדולהDesignדוגמת •

כבר עברה לה שנה... בואו נראה מה למדנו:

אנו בהחלט יכולים להיות גאים בעצמנו על ההספק!אנו בהחלט יכולים להיות גאים בעצמנו על ההספק!

אבל האם אנו מתכנתים מתקדמים?אבל האם אנו מתכנתים מתקדמים?

Page 22: מבוא ל  Groovy

הקדמהJavaהבדלים מ

צעדים ראשוניםדוגמאות קוד

סיכום תרגולי הקורס...

– תרגול 2 תכנות מתקדם 89-21112

מבוא ל

כדי להיות מתכנתים מתקדמים:...dead lineתגישו פרויקט איכותי עד ל • ותלמדו טוב למבחן!wikiתעלו את הסיכומים ל •תכירו לעומק את השפה בה אתם מתכנתים•תהיו הראשונים ללמוד על טכנולוגיות, שפות וכלים חדשים •

ברגע שהם רואים אורתשכילו להשתמש בכלים, בשפות התכנות ובספריות הקוד •

שהכי מתאימים לעבודה הנדרשת )גמיש( לפני שתחשבו על קודdesignתחשבו על •תממשו את בדיקת הקוד לפני כתיבתו...•תזכרו שאתם לא מתכנתים לבד בפרויקט...•תתרמו לפרויקט קוד פתוח!!•תצברו ניסיוןהכי חשוב: •תארו את הניסיון שלכם בבלוג ;-(•

סיכום תרגולי הקורס

Page 23: מבוא ל  Groovy

הקדמהJavaהבדלים מ

צעדים ראשוניםדוגמאות קוד

סיכום תרגולי הקורס...

– תרגול 2 תכנות מתקדם 89-21112

מבוא ל

אני מודה לכם מאד על ההקשבה,

הנכונות להשתתף בשיעור ולשאול שאלות,

ובעיקר על ההתמדה...

נותר לי רק לאחל לכם בהצלחה!

בפרויקט, במבחן, בהמשך התואר ובכלל...

אלי.

סיכום תרגולי הקורס