Download ppt - מבוא ל Groovy

Transcript
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

מבוא ל

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

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

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

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

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

אלי.

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