2019. május 7., kedd

Alapfogalmak jáva programozás soránAlapfogalmak jáva programozás során

Jáva programozás jellemzői ;
egyszerű
objektumorientált
előfordított
értelmezett
robusztus
biztonságos
semleges architektúrájú
hordozható
nagy teljesítményű
többszálú
dinamikus

Osztályozásnak nevezzük azt a folyamatot, amelynek során a hasonló objektumokat közös csoportokba, más néven osztályokba soroljuk.

Az objektum változókból és kapcsolódó metódusokból felépített egység.
Az adatok az objektumpéldányok változóiként írhatók le, a viselkedések pedig a metódusokkal.

A main metódus
Minden Java alkalmazásnak tartalmaznia kell main metódust a következő deklarációval:

public static void main(String[] args)

A main metódus deklarációja három módosítót tartalmaz:

public: jelzi, hogy a metódust más osztálybeli objektumokból is meg lehet hívni
static: jelzi, hogy a main osztálymetódus
void: jelzi, hogy a metódusnak nincs visszatérési értéke


Az osztály (class) alapvető építőeleme az objektumorientált nyelveknek. Az osztály az adatok és viselkedések összességéből álló példányok sablonját adja meg. Amikor az osztályból példányt hozunk létre, akkor tulajdonképpen egy olyan objektum jön létre, amelyik úgy épül fel, és úgy viselkedik, mint az osztály egyéb példányai.Metódus (módszer): Az osztálydefiníció része, az osztály objektumainak viselkedését leíró programrutin.




public: A metódusoknál különféle módosítókat, például hozzáférési szintet adhatunk meg, hogy az adott metódust milyen kód használhatja. Ebbe most részletesen nem mennék bele, egyelőre fogadjuk el, hogy a public olyan hozzáférést biztosít, hogy akármilyen kód használhatja ezt a metódust. A public kulcsszó akár el is hagyható, de a hiánya is egyfajta jogosultsági szintet jelent. Egyéb módosítók is léteznek, ezekről későbbi leckében írok.
static: Kötelező, ha a main-ben megírt kódjainkat szeretnénk kiegészíteni a metódusokkal. Nélküle a kód szintaktikai hibát tartalmaz. A saját objektumokba írt metódusoknál nagyon nem mindegy, hogy használjuk-e a static kulcsszót, vagy sem. Erről szintén egy későbbi lecke szól majd.
visszatérési érték típusa: A static után meg kell adni, hogy a metódusnak van-e visszatérési értéke, vagy nincs. Ha van, akkor a visszatérési érték típusát kell megadni (3-4 példák), ha nincs, akkor a void kulcsszót kell használni (1-2 példák). Az ábrán vörös nyíllal kiemeltem, hogy ezeknek a típusoknak kötelezően egyeznie kell!
metódus neve: A metódus neve a névadási szabályoknak megfelelően bármi lehet, de illik olyan nevet adni, ami utal arra, hogy a metódus milyen feladatot lát el. A név jellemzően egyedi, de bizonyos körülmények együttállása esetén azonos nevek is megengedettek, ezekről a felsorolás után írok. A metódusok nevénél is illik használni a camelCase elvet, vagyis több szóból álló nevek esetén az első szó kisbetűvel kezdődik, utána minden szó kezdőbetűje nagybetű.
zárójelek: Kötelező formai elemek, de csak akkor kell szerepeltetni benne valamit, ha a metódus paramétert vagy paramétereket kap.
paraméterek: Amennyiben szükség van rájuk, minden paramétert típussal és névvel kell megadni a zárójelen belül, vesszőkkel elválasztva. A paraméter típusának a hozzátartozó értékhez passzolnia kell, neve a névadási szabályoknak megfelelően bármi lehet. A kapott paraméter hatóköre a metódus blokkjára korlátozódik, csak a metóduson belül értelmezett. A változó értékét csak a metódusban lehet használni. Más metódusokban is használhatjuk ugyanezt a változónevet, ezek között nincs átfedés, nincs hatásuk egymásra. A kapott paraméter neve meg is egyezhet a metódus nevével, de szerintem az egyezést célszerű kerülni.
blokk: A metódusnak egy speciális esetet leszámítva kötelező blokkot nyitni. A blokkba írjuk meg azokat az utasításokat, amelyek a feladatot végrehajtják, vagy előállítják az eredményt.
return: Amennyiben a metódusnak van visszatérési értéke, a blokknak mindenképpen tartalmaznia kell legalább egy return szóval kezdődő utasítást, ami után szerepelnie kell annak a változónak, értéknek, kifejezésnek, amely az eredményt határozza meg. Ha a blokkon belül több feltételhez kötött ág is található, biztosítani kell, hogy return utasítással mindenképpen találkozzon a végrehajtás. Visszatérési érték nélküli (void) típusú metódus esetén is használható return utasítás. Ilyenkor a return után csak a lezáró pontosvessző állhat. A szerepe az, hogy a metódus végrehajtása azonnal véget ér, és a return utáni utasítások végrehajtása nem történik meg. A vezérlés ebben az esetben azonnal visszakerül a metódust hívó utasításhoz.

Szeretnénk egy metódust készíteni, ami kirajzol egy — jelekből álló vonalat az egyes feladatok elválasztására
public static void vonal()
{
  System.out.println("-----");
}

Szeretnénk egy metódust készíteni, mely egy kapott tömb elemeit kiírja a képernyőre.
public static void kiir( int[] tomb )
{
  for( int i = 0; i < tomb.length; i++ )
  {
    System.out.println(tomb[i]+" ");
  }
  System.out.println();
}

Szeretnénk egy metódust készíteni, amely visszaad egy véletlen számot a [-10;30] intervallumból.
public static int veletlen()
{
  int szam;
  szam = (int)(Math.random()*41)-10;
  return szam;
}


Szeretnénk egy metódust készíteni, amely két kapott szám átlagát adja vissza eredményként.
public static double atlag( int szam1, int szam2 )
{
  double atl = (szam1+szam2 )/2.0;
  return atl;
}

Eljárás: Olyan metódus, amelynek nincs visszatérési értéke.
Függvény: Olyan metódus, amelynek van visszatérési értéke.
Absztrakt osztály: Olyan osztály, amely nem példányosítható, mert van olyan metódusa, amely nincs az adott osztályban implementálva. Az implementálás - származtatás után - a utódosztályban történik meg.
Konstruktor: Egy osztály olyan speciális metódusa, amely a példányosítást végzi. Egy osztálynak több - szigorúan azonos nevű - konstruktora is lehet.
Objektum: Olyan programozási eszköz, amelynek neve, adattagjai által reprezentált állapota, és metódusaival jellemzett viselkedése van. Egy osztálykonstruktor általi példányosítása során jön létre.
Objektum-orientált programozás: Olyan programozási paradigma, amely a programot objektumokból építi fel. Az objektumok viselkedése adja a program működését.
Osztály: Olyan felhasználói típus (tervrajz), amely alapján objektumok (példányok) hozhatók létre. Legfontosabb részei a neve, adattagjainak és metódusainak definíciója.
Osztályszintű metódus: Olyan metódus, amely közvetlenül az osztályhoz kapcsolódik, nem pedig a példányokhoz. Az osztálymetódust az objektumok közösen használhatják.
Paradigma: Személet- és gondolkodásmód, egy tudományos közösség tagjai által elfogadott értékek és módszerek összessége.
Polimorfizmus: Egyrészt jelenti a metódusok felülírását (dinamikus polimorfizmus, újraimplementálás), amely során egy leszármazott osztályban felülírjuk (módosítjuk) az ősosztály egy metódusát, másrészt jelenti a metódusok túlterhelését (statikus polimorfizmus, többalakúság), amikor egy osztályon belül ugyanolyan néven több metódus is létezik, és csak formális paraméterlistájuk alapján különböztethetők meg. Statikus polimorfizmust valósítanak meg az osztályok konstruktorai is.

Program szerkezete;
Applet példa
import java.applet.*;
import java.awt.*;

public class DrawingLines extends Applet {

   int width, height;

   public void init() {
      width = getSize().width;
      height = getSize().height;
      setBackground( Color.black );
   }

   public void paint( Graphics g ) {
      g.setColor( Color.green );
      for ( int i = 0; i < 10; ++i ) {
         g.drawLine( width, height, i * width / 10, 0 );
      }
   }
}
1.3.2. Midlet példa
/*
* Copyright © 2013 Nokia Corporation. All rights reserved. Nokia and Nokia
* Connecting People are registered trademarks of Nokia Corporation. Oracle and
* Java are trademarks or registered trademarks of Oracle and/or its affiliates.
* Other product and company names mentioned herein may be trademarks or trade
* names of their respective owners. See LICENSE.TXT for license information.
*/
package com.nokia.example;

import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.midlet.MIDlet;

public class HelloWorldMIDlet extends MIDlet {

    public HelloWorldMIDlet() {
    }

    // Sets the MIDlet's current Display to a HelloScreen object.
    public void startApp() {
        Displayable current = Display.getDisplay(this).getCurrent();
        if (current == null) {
            HelloScreen helloScreen = new HelloScreen(this, "Hello, world!");
            Display.getDisplay(this).setCurrent(helloScreen);
        }
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
    }
}
1.3.3. Servlet példa
package org.ow2.frascati.examples.helloworld.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.osoa.sca.annotations.Property;

public class HelloWorldHttpServlet
     extends HttpServlet
{
private static final long serialVersionUID = 1L;

/**
* A configurable property 'name'.
*/
@Property(name = "name")
private String name;

/**
* @see HttpServlet#doGet(HttpServletRequest, HttpServletResponse)
*/
@Override
public final void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException
    {
      response.setContentType("text/html");
      PrintWriter out = response.getWriter();
      String query = request.getQueryString();
      out.println("<html><body>Hello " + (query==null?"World":query) + " I'm " + name + "</body></html>");
      out.close();
    }

}
1.3.4. Activity példa
/*
* Copyright 2013 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.example.android.basicnetworking;

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.util.TypedValue;
import android.view.Menu;
import android.view.MenuItem;

import com.example.android.common.logger.Log;
import com.example.android.common.logger.LogFragment;
import com.example.android.common.logger.LogWrapper;
import com.example.android.common.logger.MessageOnlyLogFilter;

/**
* Sample application demonstrating how to test whether a device is connected,
* and if so, whether the connection happens to be wifi or mobile (it could be
* something else).
*
* This sample uses the logging framework to display log output in the log
* fragment (LogFragment).
*/
public class MainActivity extends FragmentActivity {

    public static final String TAG = "Basic Network Demo";
    // Whether there is a Wi-Fi connection.
    private static boolean wifiConnected = false;
    // Whether there is a mobile connection.
    private static boolean mobileConnected = false;

    // Reference to the fragment showing events, so we can clear it with a button
    // as necessary.
    private LogFragment mLogFragment;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.sample_main);

        // Initialize text fragment that displays intro text.
        SimpleTextFragment introFragment = (SimpleTextFragment)
                    getSupportFragmentManager().findFragmentById(R.id.intro_fragment);
        introFragment.setText(R.string.intro_message);
        introFragment.getTextView().setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16.0f);

        // Initialize the logging framework.
        initializeLogging();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            // When the user clicks TEST, display the connection status.
            case R.id.test_action:
                checkNetworkConnection();
                return true;
            // Clear the log view fragment.
            case R.id.clear_action:
                mLogFragment.getLogView().setText("");
                return true;
        }
        return false;
    }

    /**
     * Check whether the device is connected, and if so, whether the connection
     * is wifi or mobile (it could be something else).
     */
    private void checkNetworkConnection() {
      ConnectivityManager connMgr =
          (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
      NetworkInfo activeInfo = connMgr.getActiveNetworkInfo();
      if (activeInfo != null && activeInfo.isConnected()) {
          wifiConnected = activeInfo.getType() == ConnectivityManager.TYPE_WIFI;
          mobileConnected = activeInfo.getType() == ConnectivityManager.TYPE_MOBILE;
          if(wifiConnected) {
              Log.i(TAG, getString(R.string.wifi_connection));
          } else if (mobileConnected){
              Log.i(TAG, getString(R.string.mobile_connection));
          }
      } else {
          Log.i(TAG, getString(R.string.no_wifi_or_mobile));
      }
    }

    /** Create a chain of targets that will receive log data */
    public void initializeLogging() {

        // Using Log, front-end to the logging chain, emulates
        // android.util.log method signatures.

        // Wraps Android's native log framework
        LogWrapper logWrapper = new LogWrapper();
        Log.setLogNode(logWrapper);

        // A filter that strips out everything except the message text.
        MessageOnlyLogFilter msgFilter = new MessageOnlyLogFilter();
        logWrapper.setNext(msgFilter);

        // On screen logging via a fragment with a TextView.
        mLogFragment =
                (LogFragment) getSupportFragmentManager().findFragmentById(R.id.log_fragment);
        msgFilter.setNext(mLogFragment.getLogView());
    }
}
1.3.5. Swing példa
/*
* Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
*   - Redistributions of source code must retain the above copyright
*     notice, this list of conditions and the following disclaimer.
*
*   - Redistributions in binary form must reproduce the above copyright
*     notice, this list of conditions and the following disclaimer in the
*     documentation and/or other materials provided with the distribution.
*
*   - Neither the name of Oracle or the names of its
*     contributors may be used to endorse or promote products derived
*     from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

/**
* This example, */
package start;

/*
* HelloWorldSwing.java requires no other files.
*/
import javax.swing.*;     

public class HelloWorldSwing {
    /**
     * Create the GUI and show it.  For thread safety,
     * this method should be invoked from the
     * event-dispatching thread.
     */
    private static void createAndShowGUI() {
        //Create and set up the window.
        JFrame frame = new JFrame("HelloWorldSwing");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //Add the ubiquitous "Hello World" label.
        JLabel label = new JLabel("Hello World");
        frame.getContentPane().add(label);

        //Display the window.
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        //Schedule a job for the event-dispatching thread:
        //creating and showing this application's GUI.
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
}





Nincsenek megjegyzések:

Megjegyzés küldése