Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up
for free
Androidアプリを作る 第3回
nonylene
November 06, 2016
Technology
0
820
Androidアプリを作る 第3回
gist の URL はこちら ->
https://gist.github.com/nonylene/e0af007263fefa34028fce58988e1a9b
nonylene
November 06, 2016
Tweet
Share
More Decks by nonylene
See All by nonylene
nonylene
0
28
nonylene
1
1.3k
nonylene
0
1.1k
nonylene
1
830
nonylene
0
790
nonylene
0
500
nonylene
0
590
nonylene
11
3.6k
nonylene
1
1.5k
Other Decks in Technology
See All in Technology
clustervr
0
200
iqbocchi
0
540
ray_30cm_ns
0
280
hhiroshell
7
430
hecateball
1
12k
opdavies
0
1.6k
satoryu
0
2.3k
ocise
1
950
ama_ch
0
3.6k
kekeke_47
0
350
toshinoritakai
1
210
shotakashihara
1
1.3k
Featured
See All Featured
kneath
294
39k
geoffreycrofte
18
780
mongodb
23
3.8k
pedronauck
652
110k
morganepeng
92
14k
scottboms
251
11k
chrislema
231
16k
swwweet
206
6.8k
tanoku
86
8.5k
addyosmani
1348
190k
holman
448
130k
hursman
106
9.2k
Transcript
"OESPJEΞϓϦΛ࡞Δ ,.$OPOZMFOF +BWBޙ
ࣗݾհ w OPOZMFOF ͷʹΕΜ w ,.$ճ w SPPU
ࣗݾհ w OPOZMFOF ͷʹΕΜ w εϚϗΞϓϦͱ͔ w 5XJUUFS(JU)VCFUD w
IUUQOPOZMFOFIBUFOBCMPHKQ
͜ΜΜ
ࠓΔ͜ͱ +BWBޙ Ϋϥεܧঝ ܕมʢΩϟετʣ ͦͷଞ+BWBͷจ๏
+BWBޙ
Ϋϥεܧঝ
Ϋϥεܧঝͱ w ͋ΔΫϥεΛݩʹͯ͠৽͍͠ΫϥεΛ࣮ w ॲཧͷڞ௨ԽɾΫϥεͷ֊Խ
Ϋϥεܧঝͱ w +BWBͰҰͭͷΫϥε͔Β͔͠ܧঝͰ͖ͳ͍ w ʢଟॏܧঝͰ͖ͳ͍ʣ
Ϋϥε ࢠΫϥε ܧঝ ʢεʔύʔΫϥεʣ ʢαϒΫϥεʣ
࣮ྫ
·Μ͕λΠϜ͖ΒΒ ͰֶͿΫϥεܧঝ
·Μ͕λΠϜ͖ΒΒͱ w ๕จࣾͷίϚϚϯΨࢽͦͷ࢞ຓࢽ܈ w ·Μ͕λΠϜͷएऀ͚ͱ͍͏Ґஔ͚ͮ
·Μ͕λΠϜ͖ΒΒୡ w ·Μ͕λΠϜ͖ΒΒ w ·Μ͕λΠϜ͖ΒΒΩϟϥοτ w ·Μ͕λΠϜ͖ΒΒ."9 w ·Μ͕λΠϜ͖ΒΒϑΥϫʔυ w
·Μ͕λΠϜ͖ΒΒϛϥΫ
·Μ͕λΠϜ͖ΒΒ ·Μ͕λΠϜ ͖ΒΒ ·Μ͕λΠϜ ͖ΒΒ Ωϟϥοτ ·Μ͕λΠϜ ͖ΒΒ ."9 ·Μ͕λΠϜ
͖ΒΒ ϑΥϫʔυ ·Μ͕λΠϜ ͖ΒΒ ϛϥΫ
ίϛοΫࡶࢽ ·Μ͕λΠϜ͖ΒΒ ·Μ͕λΠϜ ͖ΒΒ ·Μ͕λΠϜ ͖ΒΒ Ωϟϥοτ ·Μ͕λΠϜ ͖ΒΒ ."9
·Μ͕λΠϜ ͖ΒΒ ϑΥϫʔυ ·Μ͕λΠϜ ͖ΒΒ ϛϥΫ
ίϛοΫࡶࢽ ࡶࢽ ·Μ͕λΠϜ͖ΒΒ ·Μ͕λΠϜ ͖ΒΒ ·Μ͕λΠϜ ͖ΒΒ Ωϟϥοτ ·Μ͕λΠϜ ͖ΒΒ
."9 ·Μ͕λΠϜ ͖ΒΒ ϑΥϫʔυ ·Μ͕λΠϜ ͖ΒΒ ϛϥΫ
ComicMagazine Magazine BaseMangaTimeKirara MangaTimeKirara, MangaTimeKiraraCarat, MangaTimeKiraraMax, etc…
Magazine BaseMangaTimeKirara MangaTimeKirara, MangaTimeKiraraCarat, MangaTimeKiraraMax, etc… ( MangaTimeKirara ͕͋ΔͨΊ )
ComicMagazine
.BHB[JOFΫϥε࣮ w λΠτϧɾδϟϯϧɾձࣾɾ߸Λอ࣋ w આ໌༻จষग़ྗ͢Δ
.BHB[JOFΫϥε࣮ * Magazine.java class Magazine { private String title; private
String genre; private String company; private int number; public Magazine(String title, String genre, String company, int number) { this.title = title; this.genre = genre; this.company = company; this.number = number; } public String getInfoText() { return company + " ͷ " + title + number + "߸"; } }
$PNJD.BHB[JOF࣮ w δϟϯϧອըͩͱ͔͍ͬͯΔ ˠ δϟϯϧͷҾෆཁ w ·ͣී௨ʹ࣮
$PNJD.BHB[JOF࣮ * ComicMagazine.java class ComicMagazine { private String title; private
String genre = "ອըࡶࢽ"; private String company; private int number; public ComicMagazine(String title, String company, int number) { this.title = title; this.company = company; this.number = number; } public String getInfoText() { return company + "ͷ" + title + number + "݄߸"; } }
$PNJD.BHB[JOF࣮ ComicMagazine magazine = new ComicMagazine("·Μ͕λΠϜ͖ΒΒMAX", "๕จࣾ", 1); String text
= magazine.getInfoText();
.BHB[JOFܧঝ w MagazineΛܧঝ͢ΔΑ͏ʹมߋ͢Δ • extends Magazine
.BHB[JOFܧঝ w Magazine͔ΒϝϯόมϝιουFUDʜ ͕Ҿ͖ܧ͕ΕΔ w ίϯετϥΫλҾ͖ܧ͕Εͳ͍ w ࢠΫϥεͰݺͿඞཁ͕͋Δ Magazine ComicMagazine
titile / author … getInfoText() ࢠ
.BHB[JOFܧঝ w Magazine͔ΒϝϯόมϝιουFUDʜ ͕Ҿ͖ܧ͕ΕΔ w ࢠΫϥε෦͔Βݟ͑Δ͔Ͳ͏͔ผ w privateͳͷݟ͑ͳ͍ Magazine ComicMagazine
titile / author … getInfoText() ࢠ
.BHB[JOFܧঝ * CodeMagazine.java class ComicMagazine extends Magazine { public ComicMagazine(String
title, String company, int number) { super(title, "ອըࡶࢽ", company, number); } } Magazine Λܧঝ
.BHB[JOFܧঝ * CodeMagazine.java class ComicMagazine extends Magazine { public ComicMagazine(String
title, String company, int number) { super(title, "ອըࡶࢽ", company, number); } } Magazine ʹఆٛ͞ΕͨίϯετϥΫλΛݺͿ ※ genre Λৗʹ “ອըࡶࢽ” ͱ͍ͯ͠Δ
.BHB[JOFܧঝ ComicMagazine magazine = new ComicMagazine("·Μ͕λΠϜ͖ΒΒMAX", "๕จࣾ", 1); String text
= magazine.getInfoText(); Magazine ͷϝιου͕͑Δ
#BTF.BOHB5JNF,JSBSB࣮ w ͖ΒΒୡڞ௨ͷ৽͍͠ػೳΛ࡞Γ͍ͨ w දࢴΛ০Δ࡞Λཧ͍ͨ͠ ˠ ৽͍͠ม coverTitle ͕ඞཁ ˠ
৽͍͠Ϋϥε BaseMangaTimeKirara
* BaseMangaTimeKirara.java class BaseMangaTimeKirara extends ComicMagazine { private String coverTitle;
public BaseMangaTimeKirara(String title, String coverTitle, int number) { super(title, "๕จࣾ", number); this.coverTitle = coverTitle; } public String getCoverTitle() { return coverTitle; } } #BTF.BOHB5JNF,JSBSB࣮ coverTitle มΛఆٛ
* BaseMangaTimeKirara.java class BaseMangaTimeKirara extends ComicMagazine { private String coverTitle;
public BaseMangaTimeKirara(String title, String coverTitle, int number) { super(title, "๕จࣾ", number); this.coverTitle = coverTitle; } public String getCoverTitle() { return coverTitle; } } #BTF.BOHB5JNF,JSBSB࣮ ComicMagazine ΫϥεͷίϯετϥΫλΛݺͿ
* BaseMangaTimeKirara.java class BaseMangaTimeKirara extends ComicMagazine { private String coverTitle;
public BaseMangaTimeKirara(String title, String coverTitle, int number) { super(title, "๕จࣾ", number); this.coverTitle = coverTitle; } public String getCoverTitle() { return coverTitle; } } #BTF.BOHB5JNF,JSBSB࣮ coverTitle ʹೖ͢Δ ※ ComicMagazine ʹ coverTitle ͳ͍
* BaseMangaTimeKirara.java class BaseMangaTimeKirara extends ComicMagazine { private String coverTitle;
public BaseMangaTimeKirara(String title, String coverTitle, int number) { super(title, "๕จࣾ", number); this.coverTitle = coverTitle; } public String getCoverTitle() { return coverTitle; } } #BTF.BOHB5JNF,JSBSB࣮ getCoverTitle() ϝιουΛఆٛ ※ ComicMagazine ʹ getCoverTitle() ͳ͍
#BTF.BOHB5JNF,JSBSB BaseMangaTimeKirara kirara = new BaseMangaTimeKirara(“·Μ͕λΠϜ͖ΒΒMAX”, "͖Μ͍ΖϞβΠΫ", 1); String cover
= kirara.getCoverTitle(); String text = kirara.getInfoText();
.BOHB5JNF,JSBSB."9࣮ w ͖ΒΒ."9Ͱઆ໌จΛม͍͑ͨ w ࠓʮ๕จࣾͷ·Μ͕λΠϜ͖ΒΒ."9݄߸ʯ w ."9 ʮ·Μ͕λΠϜ͖ΒΒͷυΩυΩϏδϡΞϧίϛο Ϋεʂࠓ݄ͷ·Μ͕λΠϜ͖ΒΒ."9݄߸ͷද ࢴ͖Μ͍ΖϞβΠΫʂʯ
.BOHB5JNF,JSBSB."9࣮ w getInfoText()ͷ༰Λมߋ͢Δඞཁ ˠ ΦʔόʔϥΠυ 0WFSSJEF Λߦ͏
w લ४උ w MangaTimeKiraraMAX͔Β title / number / coverTitle ʹ
ΞΫηεͰ͖ΔΑ͏ʹ͢Δ .BOHB5JNF,JSBSB."9࣮
w લ४උ w ࠓճϝϯόมͷΞΫηεम০ࢠΛมߋ w ϝιουΛ࡞͢Δ߹͋Δ w private ࣗͷΫϥεͷΈ
protected ࣗͱࢠΫϥεͷΈ .BOHB5JNF,JSBSB."9࣮
ΞΫηεम০ࢠมߋ * Magazine.java class Magazine { protected String title; private
String genre; private String company; protected int number; public Magazine(… }
ΞΫηεम০ࢠมߋ * BaseMangaTimeKirara.java class BaseMangaTimeKirara extends ComicMagazine { protected String
coverTitle; public BaseMangaTime… }
.BOHB5JNF,JSBSB."9࣮ w getInfoText() ΛΦʔόʔϥΠυ͢Δ w @OverrideΞϊςʔγϣϯ ޙड़ Λ͚Δ w ͚ͳͯ͘ίϯύΠϧ௨Δέʔε͋Δ͚Ͳ
͚·͠ΐ͏
.BOHB5JNF,JSBSB."9࣮ * MangaTimeKiraraMAX.java class MangaTimeKiraraMAX extends BaseMangaTimeKirara { public MangaTimeKiraraMAX(String
coverTitle, int number) { super("·Μ͕λΠϜ͖ΒΒMAX", coverTitle, number); } @Override public String getInfoText() { return "·Μ͕λΠϜ͖ΒΒͷυΩυΩϏδϡΞϧίϛοΫε!ࠓ݄ͷ" + title + number + "݄߸ͷදࢴ" + coverTitle + "!"; } } getInfoText() Λ Override ͢Δ
BaseMangaTimeKirara kirara = new BaseMangaTimeKirara( "·Μ͕λΠϜ͖ΒΒMAX", "͖Μ͍ΖϞβΠΫ" , 1); String
text = kirara.getInfoText(); MangaTimeKiraraMAX max = new MangaTimeKiraraMAX( "͖Μ͍ΖϞβΠΫ" , 1); String maxText = max.getInfoText(); .BOHB5JNF,JSBSB."9 UFYU๕จࣾͷ·Μ͕λΠϜ͖ΒΒ."9݄߸ NBY5FYU·Μ͕λΠϜ͖ΒΒͷυΩυΩʢུʣ
Կ͕خ͍͔͠ w ࡶࢽؔͷॲཧΛߦ͍͍ͨ࣌ʜ w ࡶࢽશମͷॲཧMagazineΛҾʹऔΔ w ଞͷMagazineͷࢠΫϥε͑Δ w ·Μ͕λΠϜ͖ΒΒઐ༻ͷॲཧ MangaTimeKiraraΛҾʹऔΔ
ྫ public void printInfo(Magazine magazine) { System.out.println(magazine.getInfoText()); } public void
printCoverTitle(BaseMangaTimeKirara magazine) { System.out.println(magazine.getCoverTitle()); } MangaTimeKiraraMAX max = new MangaTimeKiraraMAX("͖Μ͍ΖϞβΠΫ" , 1); printInfo(max); printCoverTitle(max);
"CTUSBDU Ϋϥε
"CTUSBDUΫϥε w +BQBOFTFநΫϥε w 㲗۩ମ w ϝιουͷ۩ମతͳॲཧΛࢠΫϥεʹͤΔ w ϝιουΛ࣮ͤͣʹએݴ͚ͩ͢Δ͜ͱ͕Ͱ͖Δ w
"CTUSBDUͰͳ͍ ࢠΫϥεඞͣϝιουΛ࣮
"CTUSBDUΫϥε w ۩ମతͳॲཧΛॻ͔ͳͯ͘ྑ͍ ˠ ܧঝ͞ΕΔ͜ͱ͕લఏͷΫϥε ˠ "CTUSBDUΫϥεࣗମͷΦϒδΣΫτ ࡞Εͳ͍
ྫ w ·Μ͕λΠϜ͖ΒΒઐ༻ʹɺ ΞχϝԽ͍ͯ͠Δອը͕͋Εฦ͢ػೳ࡞ w ͱΓ͋͑ͣࠓճΫϥε͝ͱʹݻఆΛฦ͢ w BaseMangaTimeKiraraΛ"CTUSBDUʹ w ͜ͷΫϥεࡶࢽͦͷͷͰͳ͍
w ܧঝ͞ΕΔ͜ͱ͕લఏ
* BaseMangaTimeKirara.java abstract class BaseMangaTimeKirara extends ComicMagazine { protected String
coverTitle; public BaseMangaTimeKirara(String title, String coverTitle, int number) { super(title, , number); this.coverTitle = coverTitle; } public String getCoverTitle() { return coverTitle; } public abstract String getAnimeTitle(); } abstract म০ࢠΛ͚ͭΔ
* BaseMangaTimeKirara.java abstract class BaseMangaTimeKirara extends ComicMagazine { protected String
coverTitle; public BaseMangaTimeKirara(String title, String coverTitle, int number) { super(title, , number); this.coverTitle = coverTitle; } public String getCoverTitle() { return coverTitle; } public abstract String getAnimeTitle(); } BCTUSBDUϝιουΛՃʢ࣮ॻ͔ͳ͍ʣ
w getAnimeTitle()ΛΦʔόʔϥΠυ͢Δ w ͠ͳ͍ͱίϯύΠϧΤϥʔ .BOHB5JNF,JSBSB."9࣮
* MangaTimeKiraraMAX.java class MangaTimeKiraraMAX extends BaseMangaTimeKirara { public MangaTimeKiraraMAX(String coverTitle,
int number) { super("·Μ͕λΠϜ͖ΒΒMAX", coverTitle, number); } @Override public String getInfoText() { return “·Μ͕λΠϜ͖ΒΒ…" + …(ུ); } @Override public String getAnimeTitle() { return "εςϥͷ·΄͏"; } }
"CTUSBDUΫϥεΛҾʹ public void printAnimeTitle(BaseMangaTimeKirara magazine) { System.out.println( magazine.getAnimeTitle() ); }
// BaseMangaTimeKirara ͏ΦϒδΣΫτΛ࡞Ͱ͖ͳ͍ MangaTimeKiraraMAX max = new MangaTimeKiraraMAX("͖Μ͍ΖϞβΠΫ" , 1); printAnimeTitle(max); ௨ৗͷΫϥεͱಉ͡Α͏ʹϝιουΛݺΔ
*OUFSGBDF
*OUFSGBDF w ΠϯλʔϑΣʔε w நϝιουͱఆͷΈ w ܕͱͯ͑͠ΔʢࣅͯΔ͕ΫϥεͰͳ͍ʣ w ΦϒδΣΫτΛ࡞Ͱ͖ͳ͍ w
ΠϯλʔϑΣʔεΛʮ࣮ JNQMFNFOU ͢Δʯ ͱ͍͏
*OUFSGBDFͱ "CTUSBDU$MBTT w "CTUSBDU$MBTTࢠؔ w " ࢠ JT#
w *OUFSGBDFೳྗతͳײ͡ w " Ϋϥε DBO# ΠϯλʔϑΣʔε
*OUFSGBDF w ΠϯλʔϑΣʔεଟॏʹ࣮Մೳʢॏཁʣ w ʮ͜ͷΫϥε͜͏͍͏ػೳΛ࣋ͪ·͢Αʯͱ͍ ͏ҙຯ߹͍ͳͷͰ
ྫ w ࡶࢽΛϑΝΠϧʹग़ྗ͍ͨ͠ w ʮϑΝΠϧʹग़ྗͰ͖Δͭʯͱ͍͏*OUFSGBDF Λ࡞Δ • FileExpotable Λ࡞Δ
* FileExportable.java interface FileExportable { public void export(); ʩ 'JMF&YQPSUBCMF࣮
interface Λఆٛ
* FileExportable.java interface FileExportable { void export(); ʩ 'JMF&YQPSUBCMF࣮ ϝιουΛఆٛ
(abstract ෆཁ)
.BHB[JOF࣮ w MagazineʹFileExportableΛ࣮͢Δ
class Magazine implements FileExportable { protected String tit… public Magazine(String
titl…) { this.title = ti…; } public String getInfoText() { return co… } @Override public void export() { // export ॲཧΛॻ͘ } } FileExportable Λ implement ͢Δ
class Magazine implements FileExportable { protected String tit… public Magazine(String
titl…) { this.title = ti…; } public String getInfoText() { return co… } @Override public void export() { // export ॲཧΛॻ͘ } } export ϝιουΛ࣮͢Δ
class Magazine implements FileExportable, Hoge, Piyo { } w *OUFSGBDFෳ࣮Մೳ
w “,”Ͱ۠ͬͯॻ͘ w ͦΕͧΕʹఆٛ͞ΕͨϝιουΛ࣮͢Δ
w ܧঝͱ࣮ಉ࣌ʹߦ͑Δ w ܧঝ࣮ؒͰϝιου໊͕ඃͬͯ0, class BaseMangaTimeKirara extends ComicMagazine implements Foo
{ }
public void exportFile( FileExportable exportable ) { exportable.export(); } MangaTimeKiraraMAX
max = new MangaTimeKiraraMAX("͖Μ͍ΖϞβΠΫ" , 1); exportFile(max); ҾͷܕʹΠϯλʔϑΣʔεΛࢦఆ͢Δ
public void exportFile( FileExportable exportable ) { exportable.export(); } MangaTimeKiraraMAX
max = new MangaTimeKiraraMAX("͖Μ͍ΖϞβΠΫ" , 1); exportFile(max); FileExportable Λ࣮͍ͯ͠ΔΫϥεͰݺͼग़͠
ComicMagazine Magazine BaseMangaTimeKirara MangaTimeKirara, MangaTimeKiraraCarat, MangaTimeKiraraMax, etc… FileExportable Hoge Foo
ܕม
ܕม w ϓϩάϥϜͷதͰมΛ ͲͷΫϥεɾΠϯλʔϑΣʔεͱͯ͠ѻ͏͔ w มߋͯ͠ΦϒδΣΫτͷ࣮ମมΘΒͳ͍ ˠ ϝιουɾมͷ݁ՌมΘΒͳ͍ ʢݺͼग़ͤΔϝιουɾม͕มΘΔʣ
ܕมͷछྨ w ҉తܕม w ࣗ໌ͳͷ w উखʹͬͯ͘ΕΔ w ໌ࣔతܕมʢΩϟετʣ w
ࣗ໌Ͱͳ͍ͷ w ࣗͰ໌ࣔ͢Δඞཁ͕͋Δ
ܕมͷྫ w ΫϥεΛҾʹऔΔϝιουʹࢠΫϥεΛ ೖΕΔ࣌ʹܕม͢Δʢ҉తʣ w ܕม͢Δ͜ͱͰΫϥεʹͳ͍ࢠΫϥεͷ ϝιουΛݺͼग़͢ʢ໌ࣔతʣ
ComicMagazine Magazine BaseMangaTimeKirara MangaTimeKirara, MangaTimeKiraraCarat, MangaTimeKiraraMax, etc… FileExportable Hoge Foo
҉తͳܕม ComicMagazine Magazine Magazine magazine = new ComicMagazine(…); ࢠ
҉తͳܕม FileExportable exportable = new Magazine(…); ΠϯλʔϑΣʔε ࣮Ϋϥε FileExportable Magazine
҉తͳܕม FileExportable exportable = new MangaTimeKirara(…); ΠϯλʔϑΣʔε ࣮ΫϥεͷࢠΫϥεɹ FileExportable MangaTimeKirara
҉తͳܕม ʢϓϦϛςΟϒܕʣ ਫ਼ߴ͍ ਫ਼͍ long int long longValue = 2;
ৄࡉ: http://www.atmarkit.co.jp/ait/articles/0803/18/news149.html
ComicMagazine Magazine Magazine magazine = new ComicMagazine(…); ComicMagazine comicMagazine =
(ComicMagazine) magazine; ࢠ ໌ࣔతͳܕมʢΩϟετʣ
FileExportable exportable = new Magazine(…); Magazine magazine = (Magazine) magazine;
ΠϯλʔϑΣʔε ࣮Ϋϥε FileExportable Magazine ໌ࣔతͳܕมʢΩϟετʣ
໌ࣔతͳܕม ʢΩϟετ ϓϦϛςΟϒܕʣ ਫ਼ߴ͍ ਫ਼͍ long int long longValue =
2; int intValue = (int) longValue; ৄࡉ: http://www.atmarkit.co.jp/ait/articles/0803/18/news149.html
ଓ͖HJTUͰ IUUQTHJTUHJUIVCDPNOPOZMFOF FBGGFGBGDFFBC