Жоспар №8402

J2ME платформасында Java тілінде ұялы телефондарға арналған AddressBook қосымшасын әзірлеу

Сұрақ-жауап

Сұрағыңызға жасанды интеллект жауап береді

МАЗМҰНЫ КІРІСПЕ 4 Курстық жұмысымның соңында AddressBook қосымшасының J2ME компиляторында жасалған, 1.JAVA ТІЛІ НЕГІЗДЕРІ 5 1.1 Java жаңа, арнайы жасалынған бағдарламалау тіл, платформа 1.2 Java виртуалды машина (JVM) 6 1.3 Java-да бағдарламалар жасауға қажетті комплект 6 1.4 Java тілінің деректер түрлері 9 1.5 Айнымалылар 10 2.ҰЯЛЫ ТЕЛЕФОНҒА ADDRESSBOOK ҚОСЫМШАСЫН JAVA ТІЛІНДЕ ОРЫНДАУ 12 2.1 Телефондарға арналған бағдарламалау орталары. Java 2 Micro 2.2 J2ME берілгендер форматы және структуралары. Обьектілер 2.3 Телефон мен компьютер байланысы 13 2.4 Эмуляторлар 16 2.5 Графикамен жұмыс 17 2.6 Массивтер 18 2.7 Примитивті түрлер 19 2.8 Ағымдарды ұйымдастыру және файлдармен жұмыс, InputStream класы. 2.9 AddressBook класы 20 2. 10 TEXTBox класы 22 2.11 Мәтін енгізу және жолдармен жұмыс 23 ҚОРЫТЫНДЫ 24 Қолданылған әдебиеттер тізімі: 25 BookReader текст мәтінін оқуға араналған қосымшасының программалық листингісі: КІРІСПЕ Менің бұл курстық жұмысымда Java программалау тілі пәні Осы компилятормен қосымша құралық. Жұмыс барысындағы қиыншылықтар яғни Ендігі мәселе сол қосымшамызды орһындайтын бағдарламаны яғни жанағы Бағдарламамыз дайын, телефонымыз бар деп бастайық. Бұл AddressBook Курстық жұмысымның соңында AddressBook қосымшасының J2ME компиляторында жасалған, 1.JAVA ТІЛІ НЕГІЗДЕРІ 1.1 Java жаңа, арнайы жасалынған бағдарламалау тіл, платформа Алгоритмдерді жүзеге асыруда бастапқыда Algol тілі, ал кейін Құрылымды бағдарламалауға үйретуде Pascal тілі қандай орын алса, Java тілі Smalltalk, Pascal, C++ т.б тілдер негізінде Сонымен, прораммалық қаматамас етуде Java тілі жаңа бастама Қолданылатын процессордің (Intelx86, SunSPARC, PowerPC т.б) түрлерімен анықталатын Java-ны жасаушылар жай тағы бір бағдарламалау тілді жасап Java байт-кодтарға негізделген, ол деген қосымшалар модулі көптеген Java-ны браузерлерді бағдарламалуға пайдалана бастады. Браузер WebRunner (HotJava Java Beans (кофе дәндері) атты компонентерді жасау технологиясы Серверлерді бағдарламалау технологиясы жұзеге асырылып сервлеттер (servlets) EJB 1.2 Java виртуалды машина (JVM) Java тілінде қосымшалар арнайы, универсалды ортада орындалады, оның Java тіліндегі кезкелген бағдарламаның бастапқы коды қарапайым тексті 1.3 Java-да бағдарламалар жасауға қажетті комплект Java тілінде бағдарламалар жасауға қажетті минималды комплекітке мыналар JRE (Java Runtime Environment) – орындау орта; JDK (Java Development Kit) сәйкес платформаларға (J2SE, J2EE, бағдарламалау орта (Eclipse, NetBeans, JBuilder, Visual Age, VisualCafe Қазіргі уақытта үш Java-платформасы бар: Java 2 Platform, Standard Edition (J2SE) – қарапайым Java 2 Platform, Enterprise Edition (J2EE) – серверлік Java 2 Platform, Micro Edition (J2ME) – аппаратты Негізгі өнім (23 мамыр 1995 ж.): JLS (Java Language Specification) – Java тіліді сипаттағыш JVM-ды сипаттағыш. Ең алдымен виртуалды машиналар жасаушыларға арналған; JDK – демонстрациялық мысалдардан, стандартты библиотекалардан және утилиттерден Java-ның версиялары: Java тілінің 1.0, 1.1, 2.0 версиялары бар. Соңғысы Java-бағдарламасын жасауға арналған стандартты құралдардың бірнеше версиялары бар. SDK (Software Development Kit) пакетінің құрылымы: bin\ - программистің құрал-сайман каталогы; demo\ - мысалда каталогы; include\ - C,C++ бағдараламаларымен әрекеттестік үшін (include-old\ алдынғы jre\ - пайдаланушының құрал-сайман каталогы; jre\bin\ - Java-машинасы (JVM); jre\lib\ - пайдаланушыға арналған Java библиотекасы + оңдеу lib\ - програмистерге арналған Java библиотекасы 1.1-сурет - Java-бағдарламасының өмір циклы Бастапқы Java-бағдарлама .java кеңістік (расширение) файлында болуы қажет. Сегіз стандартты библиотекалар: java.lang – кезкелген қосымшаның жұмыс істеуі үшін қажетті java.util – көптеген пайдалы қосымша кластар; java.applet – апплеттерді жасауға арналған кластар; java.awt, java.awt.peer – пайдаланушының графикалық интерфейсін (GUI) жасауға java.awt.image – Бейнелермен жұмыс жасауға арналған қосымша кластар; java.io – файлдар және деректер ағанымен (streams) жұмыс java.net – тораптармен жұмыс. 1.2-сурет - 1.4 версиясы технологиясының құрылымы 1.4 Java тілінің деректер түрлері Java – қатаң түрленген тіл (strongly typed language). Java тіліне еңгізілген барлық негізгі деректер түрлері екі қарапайым түрлер (primitive types) сілтеме түрлер (reference types) Сілтеме түрлер (reference types) мыналарға бөлінеді: массивтер (arrays); кластар (classes); интерфейстер (interfaces) Қарапайым түрлер (primitive types) 8. Оларды мыналарға бөлуге логикалық (кейде булев деп айтылады) boolean түрі; 7 санды (numeric); Санды (numeric) түрлерге қатысты: 5 бүтін (integral) – byte, short, int, long, 2 бөлшек (floating-point) – float, double Логикалық (boolean) түрі екі логикалық мәнге ие: true (ақиқат) false (жалған) Логикалық boolean түрінің мәні салыстырмалар нәтижесінде пайдаболады, шартты 1.5 Айнымалылар Айнымалылар бағдарламада деректерді сақтау үшін пайдаланылады. Басқаша айтқанда, Айнымалымен жұмыс оны жариялаудан (declaration) басталады. Айнымалыны жариялау Айнымалыны жариялауда final кілітті сөзі пайдалануы мүмкін. final-айнымалы Кезкелген айнымалы үш негізгі сипаттамаларға ие: аты – айнымалыны ерекше жалпылауыштайды және бағдарламада түрі – айнымалы қандай шамаларды сақтай алатындығын мәні – осы кезеңде айнымалыда сақталудағы ағымды шама Айнымалыларды пайдалануда келесі тәртіптер мен нұсқаулар бар: айнымалыны жариялауда оның түрін көрсету қажет; айнымалыларды нақты мәндермен инициализациялау керек; айнымалыларға сипаттама ат беру керек; айнымалылардың аттары келесі талаптарға сәйкес болуы тиіс: олар әріптерді, сандарды, $ белгісін және астын сызу олар сандардан басталмауы тиіс; айнымалы аты Java-ғы бірде бір кілітті сөздермен тура айнымалылардың аттары әріптер регистрына сезімтал келеді; айнымалылардың аттары бос орындарды (пробелы) құрамау керек 2.ҰЯЛЫ ТЕЛЕФОНҒА ADDRESSBOOK ҚОСЫМШАСЫН JAVA ТІЛІНДЕ ОРЫНДАУ 2.1 Телефондарға арналған бағдарламалау орталары. Java 2 Micro Ендігі қарастыратын мәселе телефондарға арналған бағдарламалау орталары. Осының 2.1-сурет - J2ME коспиляторының терезесі Осы суретте көрсетілген терезеде біз өзіміздің қосымшамызды орындаймыз. 2.2 J2ME берілгендер форматы және структуралары. Обьектілер Java тілі обьекті бағытталған бағдарламалау тіліне жатады. Сондықтан Төменде көрсетілгендей: String str = new String (“some text”) Обьект бірнеше конструктордан тұруы мүмкін. Конструктор шақырылған кезде Енді кластардың мұрагерленуін қарастырайық. Берілген класс арқылы өзіміздің Public class Graph extends Canvas Java да басқа тілдермен салыстырғанда көптік мұрагерленуге тыйым Төменде көрсетілгендей: Public class Point extends Canvas implements Command listener 2.3 Телефон мен компьютер байланысы Бұл платформа шектелген ресурстар мен жадылар және процессорлар Ең бірінші қарастыратын мәселеміз, Java тілін оқи алатын 2.2 -сурет - Жаңа құрылғы терезесі Керекті драйверімен дискті салып орнатамыз. Осыдан кейін драйвер 2.3-сурет - Құрылғылар диспетчері Егерде сіз жаңа құрылғыны көрсеңіз онда драйвер құрылысы Телефонымызды компьютерге қостық, ендігі қарастыратын мәселеміз мынадай. MobiMB 2.4-сурет - Телефон жадысы Бұл сурет бізге телефон мен компьютердің нақты байланысын Ендігі қарастыратын мәселе құрылған программаны телефонға орналастыру. Бұл 2.4 Эмуляторлар Программамызды құру барысында бізге сол өнімді тексеріп өателерін Эмуляторды өздігінен құратын болсақ ол директорий ішіндегі мына Java ның мобилді варианты J2ME стандарты бар барлық Енді қорыта келетін болсақ ұялы телефонымызға программа құру Java технологиясы бар телефон табуымыз керек. Windows операциялық жүйесі бар компьютер. Телефон мен компьютер байланысын қамтамасыз ететін сымтетік. Сондай - ақ компьютерімізде келесідей бағдарламалық қамтамасыздандырулар Сымтетік драйвері. Телефонға қосымшаны орнату программасы. J2SE SDK (version 1.4.2) Java ортасы. J2ME WTK құрылғылар жиыны. Телефон моделінің эмуляторы, аса керек емес. 2.5 Графикамен жұмыс Класс Canvas. Класс Canvas абстрактілі болып табылады. Canvas класында абстрактілі тәсіл ол abstract void paintCGraphics Graphics класы. Graphics класы төменгі дәрежелі графикалық суреттеуді Ал енді Graphics класының жұмысына келер болсақ бірінші 1.int getClipHeight() – суреттеу облысының ұзындығын береді. 2.int getCl ipWidth() — суреттеу облысының енін береді. Енді суреттеу облысының ені мен ұзындығын ала отырып Бұл жерде ескере кететін жағдай, бүкіл экран бетіне void setClip( int x. inty. int width, int Суреттеу облысын анықтап алғаннан кейін ендігі мәселе берілген void drawLinednt xl, intyl, intx2. inty2) — void drawRect( int x. inty, int width, int voiddrawRoundRect(intx. inty. intwidth, intheight, intarcWidth, intarcHeight) — дөңес void drawArc( int x, inty, intwidth. intheight, int Осылай геометриялық фигураларды түсіре аламыз. Бұл финураларды суреттеп 2.6 Массивтер Оперативті жадының ұяшықарында орналасқан бір типті берілгендер массивтер Массивтің анықталуы. Бұл этапта айнымалы мен массив типі Int array[]; Image images[]; Массивті бергенде new операторы арқылы беріледі. Бұл жерде Array= new int[50]; Images = new image[20]; Массивті инициялизациялау яғни берілген массивке мән беру. Әрбір Array[0]=5; Array[1]=10; Маиссивтермен жұмыс істегенде оның неше көлеммен берілгеніне көп 2.7 Примитивті түрлер Java обьектілі бағытталған бағдарламалау тілі болғандықтан обьект ретінде Бұл типтердің маңызы толық және азэффектілі обьект құра Төменде примитивті типтердің тізімі берілген яғни J2MЕ платформасына byte 1 байт short 2 байт char 2 байт int 4 long 8 байт 2.8 Ағымдарды ұйымдастыру және файлдармен жұмыс, InputStream класы. Берілгендер мен қосымша арасындағы байланысты ұйымдастыратын класс ол Ол келесідей шығару әдістерін береді: int read ( ) – берілгендер ағымынан келесі int read (byte[ ] b)- Ағымдағы берілгендерді буферге int read ( byte [ ] b, int int avai I abi е() – ағымдағы оқытылатын void mark ( int read limit ) – void close ( ) – ағымды жабады және 2.9 AddressBook класы Біздің мақсатымыз ұялы телефон экранынан берілген текстік файлдарды Font класынан бастайық. Бұл кластың мақсаты керекті шрифтті Бұл әдістің параметрлері келесідей: face - FACE_SYSTEM, FACE_MONOSPACE немесе FACE_PROPORTIONA size - SIZE_SMALL, SIZE_MEDIUM немесе SIZE_LARGE осы константалардың style - STYLE_PLAIN шрифт стилі осы константа int getHeight() — шрифттердің биіктігін пикселдерде көрсетеді. int charWidth(char ch) — шрифттердің енін ch int charsWidth(char[] ch. i n t offset, int int stringWidth(String str ) — str жолында жолдың int substringWidthCString s t r , i n BookCanvas класы берілген тексті көрсетеді. Page Index стегінде Ағымдағы берілгендерді оқу үстінде келесідей ауытқулар беріледі: EOFException — файл соңында құрылады. IOException — енгізу және шығару функциясының базалық Бағдарламамыздың мидлетінде BookCanvas класында обьект құру ғана қалды 2.5-сурет – Егер ішкі адрестік кітапша сізге унамаса, 2. 10 TEXTBox класы TEXTBox класы Screen класының мұрагері болып табылады. Бұл Төменде көрсетілген дол арқылы жүзеге асады: Textox(StringTitle, Stringtext, intmaxsize, intconstraints) Тағы бір ескере кететін мәселе бұл жерде терілетін Мәтіндік аймақтың Textfield класы арқылы берілген шектеулері көрсетілген: Any – барлық символдарды теруге мүмкіндік береді. EMAILADDR – электрондық почта адесіне арналған мәтіндер. NUMERIC – бүтін сандар енгізуге арналған. PHONENUMBER – телефон номерлерін теруге арналған. PASSWORD – жабық ақпараттарға ашылу кодын енгізгенде URL – Интернет беттернің адрестеріне арналған URL Мәтін текстін теруге арналған обьекті құрылғаннан кейін ол Құрылған обьектімен жұмысты textbox класының әдістерімен жүзеге void delete (int offset, int length) – int getCaretPosition() – терудің ағымадғы пзициясының күйіне int getchars(char[]data) – data символдық массивіне барлық тексті int getConstraints() – мәтін аймағының шектемесін шақырады. intgetMaxSize() – терілетін символдардың максималды мәнін қайтарады. string getString() – терілген мәтінді жол void insert(String src. Int Position) – position void setChars(char[]data, intofset,intlength) – offset позициясынан бастап data int setString (String text) – text параметрі арқылы int size() – мәтін аймағында берілген символдар 2.11 Мәтін енгізу және жолдармен жұмыс Бұл бөлімде біз қолданушымен стандартты байланыс құрылғыларын қарастырамыз. ҚОРЫТЫНДЫ AddressBook қосымшасы яғни ұялы телефоныңызға арналған адрестік кітапша Java бағдарламалау ортасына қысқаша қорытынды анықтама берелік болсақ, Қолданылған әдебиеттер тізімі: Брюс Эккель. Философия Java. 3-е изд. СПб.: Питер, Жерздев С. B.Java 2 Micro Edition. ИТЛаб, ННГУ, Вартан Пирумян. Платформа программирования J2ME для портативных устройств. Кен Арнольд, Джеймс Гослинг. Язык программирования JAVA. СПб.: Е.Л.Буткевич. Пишем программы и игры для сотовых телефонов Питер, 2006. Использованы материалы порталов и форумов: java.sun.com/j2me/docs www.juga.ru www.javagu.ru http://servlets.chat.ru/ http://javapower.da.ru/ http://www.purejava.ru/ http://java.iba.com.by/ http://java7.da.ru/ http://codeguru.earthweb.com/java/ http://www.artima.com/ . BookReader текст мәтінін оқуға араналған қосымшасының программалық листингісі: // "AdressBook" прграммасының мысалы import javax.microedition.midlet.MIDlet: import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.Form; import javax.microedition.lcdui.List; import javax.microedition.lcdui.TextField; import javax.microedition.lcdui.DateField; import javax.microedition.lcdui.TextBox; import java.util.Date: import java.util.Calendar; import java.io.ByteArrayOutputStream; import java.io.ByteArraylnputStream; import java.io.DataOutputStream: import java.io.DatalnputStream: import java.io.IOException; import javax.microedition.rms.RecordStore; import javax.mi croediti on.rms.RecordEnumerati on: import javax.microediti on.rms.RecordComparator: i mport java x. mi croedi ti on. import javax.mi croedi ti on.rms.RecordStoreExcepti on; public class AddressBook extends MIDlet implements CommandListener { private Display display; private RecordStore recordStore; // Жазулардың private List nameList; private int redndexes[]: private Command add,ok,next,back; private TextBox tbName.tbPhone.tbEMail: // экрандар арасында өтудің командалары private Form dateForm: private DateField dateField; public void destroyApp(boolean destroy) { notifyOestroyedO; public void startAppO { try { // "Address-Book" аттар тізімінің қоймасын ашу recordStore = RecordStore.openRecordStoreC"Address-Book", true): } catch (RecordStoreException rse) {} // Дисплей менеджеріне сілтеме алу display - Display.getDisplay(this); // Командалардың объектілерін құру ok = new Command("Ok". Command.OK. 1); add " new CommandC'Add". Command.BACK, 1); next • new Command("Next". Command.OK. 1); back - new CommandC'Back", Command.BACK. 1): // Ат енгізу аймағы tbName = new TextBox("Name:"."".15,TextField.ANY); tbName.addCommand(next); tbName.addCommand(back): tbName.setCommandListener(this); // Телефон нөмерін енгізу аймағы tbPhone - new TextBox( "Number:11."". 15. TextField.PHONENUMBER): tbPhone.addCommand(next): tbPhone.addCommand(back): tbPhone.setCommandLi stener(this): // Электрондық пошта енгізу аймағы tbEMail - new TextBox("E-Mail:"."".35,TextField.EMAILADDR): tbEMa i1.addCommand(next): tbEMail.addCommand(back); tbEMail.setCommandLi.tener(this): // туған күн енгізуінің орны dateField * new DateField("Birthday",DateField.DATE); dateForm = new FormC"'); dateForm.append(dateField); dateForm.addCommand(next): dateForm.addCommand(back); dateForm.setCommandListener(this): // аттар тізімін құру, BuildNameListO; // Той иесін іздеу String name • SearchBirthdayO: // Егер ат табылған болса if(name!=null) { // Еске түсіргіш формасын құру Form remindForm = new Form("Reminder"); // Еске түсіргішті формаға қосу remindForm.append Сname + " has a birthday today!"); // қайтару командасын қосу remindForm.addCommand(ok); remi ndForm.setCommandLi stener (this); // форманы көрсету display.setCurrent(remindForm); } } else // аттар тізімін экранда көрсету di splay.setCurrent(nameLi st): // SearchBirthday әдісі той иесінің атымен жолды қайтарып // егер сол күні той иесі бомаса, онда private String SearchBirthday(j { String name ≫ null; try { // туған кундер объектісінің сүзгісін жасау BirthdayFilter filter = new BirthdayFilterO; // туған күнге лайық жазулардың тізімін алу RecordEnumeratiop. re - recordStore.enumerateRecords(fiHer. null. false): // ID жазуларын алу int id - re.nextRecordldO: // ID туралы жазуларды алу byte[] record • recordStore.getRecord(id): ByteArraylnputStream bais = new ByteArraylnputStream(record); DatalnputStream dis • new DataInputStream(bais); name =-dis,readUTFC): } catch(RecordStoreException rse) {} • catchdOException ioe) {} return name: private void BuildNameListО { nameList = new ListC'Address-Book", List.IMPLICIT): nameLi st.setCommandLi stener(this): nameList.addCommand(add): nameList.addCommand(ok): try { int size = recordStore.getNumRecordsO; reclndexes - new int[size]; Alphabetical Ordering comparator = new AlphabeticalOrderingO: RecordEnumeration re - recordStore.enumerateRecords(null, comparator. false),: int i=0: while(true) { int id = re.nextRecordldO; , reclndexes[i++]=id; byte[] record - recordStore.getRecord(id); ByteArraylnputStream bais=new ByteArraylnputStream(record); DatalnputStream dis - new DatalnputStream(bais): nameList.append(dis.readUTF().null): catch(RecordStoreException rse) catch(IOException ioe) {} public void commandAction(Command с Displayable d) { if(c==add) display.setCurrent(tbName); if(c—ok) { if(d==namel_ist) { try { int id - recIndexes[nameList.getSelectedIndex()]: byte[] record - recordStore.getRecord(id); ByteArraylnputStream bais=new ByteArrayInputStream(record); DatalnputStream dis = new DatalnputStream(bais); Form infoForm = new Form(""): infoForm.append(dis.readUTF()+"\n"): infoForm.append(dis.readUTF()+"\n"); infoForm.append(dis.readUTFO); Date birthday = new Date(dis.readLongO): DateField df = new DateField("".DateField.DATE); df.setDate(birthday): infoForm.append(df); i nfoForm.addCommand(ok); i nfoForm.setCommandLi stener(thi s): display.setCurrent(infoForm); } catch(RecordStoreException rse) {} catch(IOException ioe) {} } else { display.setCurrent(nameList); if(c==next) { if(d==tbName) display.setCurrent(tbPhone); if(d==tbPhone) display.setCurrentCtbEMail): i f(d==tbEMai1) display.setCurrent(dateForm); if(d==dateForm) { ByteArrayOutputStream baos - new ByteArrayOutputStream(); DataOutputStream dos = new DataOutputStream(baos); try { dos.writeUTF(tbName.getStri ng()): dos.writeUTF(tbPhone.getStringO); dos.writeUTF(tbEMail.getStringO); dos.wri teLong(dateFi eld.getDate().getTi me()); recordStore.addRecord(baos.toByteArray(). 0. baos.sizeO); } catchdOException ioe) {} catch (RecordStoreException rse) {} BuildNameListO: display.setCurrent(nameList); if(c==back) { if(d==tbName) display.setCurrent(nameList); if(d==tbPhone) display.setCurrent(tbName); if(d--tbEMail) display.setCurrent(tbPhone): if(d==dateForm) display.setCurrent(tbEMai1): private class BirthdayFilter implements RecordFilter { public boolean matches(byte[] candidate) { ByteArraylnputStream bais = new ByteArraylnputStream(candidate); DatalnputStream dis - new DatalnputStream(bais): Date birthDate ≪ new Date'O; try { dis.readUTFO; dis.readUTFO; dis.readUTFO: birthDate.setTi me(di s.readLong()); } catch (IOExcepti.on ioe) { return false: } Calendar rightNow • Calendar.getlnstanceO: Calendar birthday = Calendar.getlnstanceO: bi rthday.setTi me(bi rthDate); i f(rightNow.get(Calendar.DAY_OF_MONTH)== birthday.get(Calendar.DAY_OF_MONTH) && ri ghtNow.get(Ca1enda r.MONTH)— bi rthday.get(Ca1enda r.MONTH)) return true; else return false; private class Alphabetical Ordering implements RecordComparator { public int compare(byte[] reel. byte[] rec2) { ByteArraylnputStream baisl = new ByteArraylnputStream(recl); ByteArraylnputStream bais2 = new ByteArrayInputStream(rec2): DatalnputStream disl = new DataInputStream(baisl); DatalnputStream dis2 = new DataInputStream(bais2); String namel = null: String name2 ≫ null: try { namel = disl.readUTF О : name2 - dis2.readUTF (): } catch (IOException ioe) {} int result = namel.compareTo(name2): if (result < 0) return RecordComparator.PRECEDES; else if (result == 0) return RecordComparator.EQUIVALENT; else return RecordComparator.FOLLOWS; } 30 

Мәтінді көшіру үшін белсенді жазылым қажет.

Пайдаланушы ID: 391963

Жарияланған күні: