Java | Kampüs Kod https://www.kampuskod.com Kampüs Bilim Sanat Teknoloji ve Yazılım Eğitimleri Platformu Mon, 11 Oct 2021 12:50:00 +0000 tr hourly 1 https://wordpress.org/?v=6.2.2 Keycloak Kullanarak Güvenli Java Spring Boot REST API Uygulaması https://www.kampuskod.com/yazilim/java/keycloak-kullanarak-guvenli-java-spring-boot-rest-api-uygulamasi/ https://www.kampuskod.com/yazilim/java/keycloak-kullanarak-guvenli-java-spring-boot-rest-api-uygulamasi/#comments Mon, 11 Oct 2021 12:45:24 +0000 https://www.kampuskod.com/?p=11330 Herkese merhabalar, bu yazımızda Keycloak’u Docker üzerinde kurup, Spring Boot-Keycloak entegrasyonunu yapıp, oluşturduğumuz REST API üzerinde url isteği yaparak Keycloak login sayfasından giriş yapıp kullanıcı bilgilerine erişiyor olacağız. İlk olarak Keycloak Nedir diyerek başlayalım. Keycloak Nedir? Keycloak, açık kaynaklı bir kimlik ve erişim yönetimi çözümüdür. Daha fazla bilgi için keycloak web sitesini ziyaret edebilirsiniz. Keycloak […]

The post Keycloak Kullanarak Güvenli Java Spring Boot REST API Uygulaması first appeared on Kampüs Kod.]]>
Herkese merhabalar, bu yazımızda Keycloak’u Docker üzerinde kurup, Spring Boot-Keycloak entegrasyonunu yapıp, oluşturduğumuz REST API üzerinde url isteği yaparak Keycloak login sayfasından giriş yapıp kullanıcı bilgilerine erişiyor olacağız. İlk olarak Keycloak Nedir diyerek başlayalım.

Keycloak Nedir?

Keycloak, açık kaynaklı bir kimlik ve erişim yönetimi çözümüdür. Daha fazla bilgi için keycloak web sitesini ziyaret edebilirsiniz.

Keycloak Docker kurulumu

Terminali açın ve aşağıdaki komutu çalıştırın.

docker run -p 8085:8080 -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin quay.io/keycloak/keycloak:15.0.2

Keycloak Konfigürasyonu

1- Keycloak admin paneline http://localhost:8085/ adresinden erişiniz. Administration console tıklayarak admin olarak giriş yapınız.

Keycloak Ayarları
Keycloak Ayarları

2- demo isminde yeni bir realm oluşturun.

Keycloak Ayarları
Keycloak Ayarları

 

3- Şimdiyse demo-app isminde yeni bir client oluşturacağız. Access type olarak public, Valid Redirect URI olarakta * veriniz. Ve ayarları kaydediniz.

Keycloak Ayarları
Keycloak Ayarları
Keycloak Ayarları
Keycloak Ayarları

4- Kullanıcı oluşturalım.

Keycloak Ayarları
Keycloak Ayarları
Keycloak Ayarları
Keycloak Ayarları

Keycloak ayarlarımızı tamamladık. Şimdiyse Spring Boot projesi kısmına geçelim.

Spring Boot Projesi Oluşturalım

1- IntelliJ IDEA üzerinden New Project diyerek açılan pencereden Spring Initializr tabını seçelim ve projemizi SpringBootKeycloak şeklinde isimlendirelim.

IntelliJ IDEA Spring Initializr Keycloak
IntelliJ IDEA Spring Initializr Keycloak

2- Spring Web ve Spring Security bağımlılıklarını projemize dahil edelim.

IntelliJ IDEA Spring Initializr Keycloak
IntelliJ IDEA Spring Initializr Keycloak

3- Pom.xml’e aşağıdaki kodları ekleyelim.

<dependencies>
    <dependency>
        <groupId>org.keycloak</groupId>
        <artifactId>keycloak-spring-boot-starter</artifactId>
        <version>15.0.2</version>
    </dependency>
</dependencies>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.keycloak.bom</groupId>
            <artifactId>keycloak-adapter-bom</artifactId>
            <version>15.0.2</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

Pom.xml’in son hali aşağıdaki gibi olmalıdır:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.5</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>SpringBootKeycloak</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>SpringBootKeycloak</name>
    <description>SpringBootKeycloak</description>
    <properties>
        <java.version>11</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.keycloak</groupId>
            <artifactId>keycloak-spring-boot-starter</artifactId>
            <version>15.0.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.keycloak.bom</groupId>
                <artifactId>keycloak-adapter-bom</artifactId>
                <version>15.0.2</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

 

5- Son olarak application.properties dosyasına aşağıdaki parametreleri ekleyelim.

keycloak.auth-server-url=http://localhost:8085/auth
keycloak.realm=demo
keycloak.resource=demo-app
keycloak.public-client=true

keycloak.auth-server-url -> Keycloak url adresi

keycloak.realm -> Oluşturduğumuz Realm adı

keycloak.resource -> Oluşturduğumuz client ID

keycloak.public-client -> Oluşturduğumuz client Public olduğu için bunu true olarak belirledik. Bu kısım client’ın access type alanına göre değiştirilebilir. Biz demo uygulama yaptığımız için şimdilik public.

6- GloabalSecurityConfiguration adında bir sınıf oluşturalım ve KeycloakWebSecurityConfigurerAdapter sınıfını extend edelim.

package com.example.springbootkeycloak;

import org.keycloak.adapters.KeycloakConfigResolver;
import org.keycloak.adapters.springboot.KeycloakSpringBootConfigResolver;
import org.keycloak.adapters.springsecurity.authentication.KeycloakAuthenticationProvider;
import org.keycloak.adapters.springsecurity.config.KeycloakWebSecurityConfigurerAdapter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.core.authority.mapping.SimpleAuthorityMapper;
import org.springframework.security.core.session.SessionRegistryImpl;
import org.springframework.security.web.authentication.session.RegisterSessionAuthenticationStrategy;
import org.springframework.security.web.authentication.session.SessionAuthenticationStrategy;

@EnableWebSecurity
public class GloabalSecurityConfiguration extends KeycloakWebSecurityConfigurerAdapter {

    @Bean
    @Override
    protected SessionAuthenticationStrategy sessionAuthenticationStrategy() {
        return new RegisterSessionAuthenticationStrategy(new SessionRegistryImpl());
    }

    @Bean
    public KeycloakConfigResolver KeycloakConfigResolver() {
        return new KeycloakSpringBootConfigResolver();
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        super.configure(http);
        http.authorizeRequests()
                .antMatchers("/").permitAll()
                .anyRequest().authenticated();
    }

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        KeycloakAuthenticationProvider keycloakAuthenticationProvider = keycloakAuthenticationProvider();
        keycloakAuthenticationProvider.setGrantedAuthoritiesMapper(new SimpleAuthorityMapper());
        auth.authenticationProvider(keycloakAuthenticationProvider);
    }
}

 

7- Son olarak REST endpointi tanımlayalım. hello adresine bir istek gittiğinde kullanıcı login sayfasına yönlenecek ve logout sayfasına gidildiğinde oluşturulan oturum silinecek ve tekrardan login sayfasına yönlenmiş olacak. getName() metodu ile kullanıcı giriş yaptıktan sonra ismini ekrana basmış olduk.

package com.example.springbootkeycloak;

import org.keycloak.KeycloakPrincipal;
import org.keycloak.KeycloakSecurityContext;
import org.keycloak.representations.AccessToken;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.Authentication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@RestController
public class HelloController {


    @GetMapping("/hello")
    public ResponseEntity<String> hello(Authentication authentication){

        if (authentication.getPrincipal() instanceof KeycloakPrincipal) {
            KeycloakPrincipal<KeycloakSecurityContext> kp = (KeycloakPrincipal<KeycloakSecurityContext>) authentication.getPrincipal();
            AccessToken token = kp.getKeycloakSecurityContext().getToken();
            final String body = "Hi,  " + token.getName();
            return ResponseEntity.ok(body);
        }
        return new ResponseEntity<>("Unauthorized", HttpStatus.UNAUTHORIZED);
    }

    @GetMapping(path = "/logout")
    public void logout(HttpServletRequest request, HttpServletResponse httpServletResponse) throws ServletException {
        request.logout();
        httpServletResponse.setHeader("Location", "/hello");
        httpServletResponse.setStatus(302);
    }
}

 

Tüm aşamaları tamamlamış olduk. Şimdiyse test edelim.

Uygulama Testi

Spring projemizi run edelim ve http://localhost:8080/hello/ adresine istek atalım. Karşımıza login sayfası gelecek. Oluşturduğumuz kullanıcı ile login olalım. Giriş yaptıktan sonra http://localhost:8080/logout adresine giderek çıkış yapabilirsiniz.

Keycloak Spring Boot Login
Keycloak Spring Boot Login
Keycloak Spring Boot Login
Keycloak Spring Boot Login
Postman üzerinden de test edebilirsiniz:

http://localhost:8085/auth/realms/demo/protocol/openid-connect/token adresine istek atarken body kısmından x-www-form-urlencoded seçerek client_id, grant_type, username, password alanları gönderiniz.

Keycloak Spring Boot Postman Test
Keycloak Spring Boot Postman Test

Üretilen access_token JWT token olarak üretilmiştir. https://jwt.io/ adresine bu access token’ı yapıştırarak token içerisindeki bilgilere erişebilirsiniz.

Keycloak Spring Boot JWT.IO Data Test
Keycloak Spring Boot JWT.IO Data Test

 

 

The post Keycloak Kullanarak Güvenli Java Spring Boot REST API Uygulaması first appeared on Kampüs Kod.]]>
https://www.kampuskod.com/yazilim/java/keycloak-kullanarak-guvenli-java-spring-boot-rest-api-uygulamasi/feed/ 1
Java İmmutable ve Mutable Nedir? – Java Dersleri https://www.kampuskod.com/yazilim/java/java-immutable-ve-mutable-nedir-java-dersleri/ https://www.kampuskod.com/yazilim/java/java-immutable-ve-mutable-nedir-java-dersleri/#respond Thu, 07 Oct 2021 07:56:01 +0000 https://www.kampuskod.com/?p=11303 Immutable (değişmez) sınıflar, nesneleri bir kez oluşturulduktan sonra nesne içeriği değiştirilemeyen sınıflardır. Aslında sabit sınıflar olarakta isimlendirebiliriz. Nesneyi oluştururken içerisinde bulunacak olan değerleri verirseniz ve sonrasında bu değerleri değiştiremezsiniz. Eğer bir immutable nesnenin state’ini değiştirmek isterseniz vermek istediğiniz state’i taşıyacak olan yeni bir nesne oluşturmak zorundasınız. Boolean, Short, Integer, Long, Float, Double, Char ve String […]

The post Java İmmutable ve Mutable Nedir? – Java Dersleri first appeared on Kampüs Kod.]]>
Immutable (değişmez) sınıflar, nesneleri bir kez oluşturulduktan sonra nesne içeriği değiştirilemeyen sınıflardır. Aslında sabit sınıflar olarakta isimlendirebiliriz. Nesneyi oluştururken içerisinde bulunacak olan değerleri verirseniz ve sonrasında bu değerleri değiştiremezsiniz. Eğer bir immutable nesnenin state’ini değiştirmek isterseniz vermek istediğiniz state’i taşıyacak olan yeni bir nesne oluşturmak zorundasınız. Boolean, Short, Integer, Long, Float, Double, Char ve String gibi tüm kapsayıcı sınıflar (Wrapper Class) java’da immutable sınıflara örnek olarak gösterilebilir. Tam tersi olarak, değiştirilebilen sınıflar da Mutable (değişebilir) sınıflardır.

Peki neden immutable sınıflara ihtiyacımız var?

Sorumuzun cevabunı hemen verelim 🙂 Bir sınıfı thread-safe yapmak istiyorsanız immutable yapmanız gerekmektedir. Immutable nesnelerin değerleri değişmeyeceği için üzerinde ne kadar thread çalışırsa çalışsın hep aynı değerler üzerinden işlem yapılacaktır. Bu noktada ortaya çıkan bir dezavantajlık söz konusuda var tabii. Immutable nesnelerin dezavantajı ise, değerin değişmesini istiyorsak yeni bir nesne oluşturmamız gerekiyor. Bu da zaman, bellek ve garbage collector maliyetleri oluşturmaktadır.

Java’da immutable sınıf nasıl oluşturulur?

  • Sınıfı, final anahtarı ile işaretleyin, böylece extend (kalıtım) edemezsiniz.
  • Sınıfın tüm alanlarını private yapın, böylece doğrudan erişime izin vermezsiniz.
  • Değişkenler için setter metodu koymayın.
  • Tüm değiştirilebilen alanları final yapın, böylece yalnızca bir kez atanabilir.
  • Tüm alanlara, constructor aracılığıyla ilk değerlerini atayın.
  • Değiştirebilir olan tüm alanların dışarıya nesnelerin klonlanarak dönmesini gerçekleştirin.

Örnek bir Immutable Sınıf yapısı aşağıdaki gibidir:

public final class ImmutablePerson {

    private final String name;

    public ImmutablePerson(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

 

The post Java İmmutable ve Mutable Nedir? – Java Dersleri first appeared on Kampüs Kod.]]>
https://www.kampuskod.com/yazilim/java/java-immutable-ve-mutable-nedir-java-dersleri/feed/ 0
Java’da İlkel Veri Tipleri Nelerdir? (Primitive Data Types) – Java Dersleri https://www.kampuskod.com/yazilim/java/javada-ilkel-veri-tipleri-nelerdir-primitive-data-types-java-dersleri/ https://www.kampuskod.com/yazilim/java/javada-ilkel-veri-tipleri-nelerdir-primitive-data-types-java-dersleri/#respond Thu, 06 Aug 2020 19:42:01 +0000 https://www.kampuskod.com/?p=6620 Java programlama dilinin en temel konularından biri olan veri türlerinde karşımıza çıkan İlkel Veri Tiplerini (Primitive Data Types) bu yazıda anlatmaya çalışacağım. Java İlkel Veri Tipleri (Java Primitive Data Types) Tamsayı Tipi (Integers) byte short int long Ondalıklı Sayı Tipi (Floating Point Numbers) float double Karakter Tipi char Mantıksal Veri Tipi boolean Java’da 8 farklı […]

The post Java’da İlkel Veri Tipleri Nelerdir? (Primitive Data Types) – Java Dersleri first appeared on Kampüs Kod.]]>
Java programlama dilinin en temel konularından biri olan veri türlerinde karşımıza çıkan İlkel Veri Tiplerini (Primitive Data Types) bu yazıda anlatmaya çalışacağım.

Java İlkel Veri Tipleri (Java Primitive Data Types)

Tamsayı Tipi (Integers)

  • byte
  • short
  • int
  • long

Ondalıklı Sayı Tipi (Floating Point Numbers)

  • float
  • double

Karakter Tipi

  • char

Mantıksal Veri Tipi

  • boolean

Java’da 8 farklı ilkel veri tipi vardır. İlkel veri tiplerini 4 ana başlık altında toparlayabiliriz:

  • Tamsayı Tipi (integers): 4 farklı tam sayı tipi vardır: byte, short, int ve long. Bu veri tiplerini tamsayıları belirtmek amacıyla kullanırız.
  • Ondalıklı Sayı Tipi(floating point numbers): 2 farklı ondalıklı sayı tipi vardır: float ve double.
  • Karakter Tipi: 1 adet karakter tipi vardır: char. Bu veri tipini karakterleri temsil etmek için kullanırırız: harfler, rakamlar, noktalama işaretleri, özel karakterler vb.
  • Mantıksal Veri Tipi: 1 adet mantıksal veri türü vardır: boolean. Bu veri tipinin true veya false olmak üzere sadece iki değeri vardır.

İlkel veri tiplerini daha detaylı bir sonraki yazımızda inceleyeceğiz.

The post Java’da İlkel Veri Tipleri Nelerdir? (Primitive Data Types) – Java Dersleri first appeared on Kampüs Kod.]]>
https://www.kampuskod.com/yazilim/java/javada-ilkel-veri-tipleri-nelerdir-primitive-data-types-java-dersleri/feed/ 0
Hibernate Nedir? Hibernate Framework Avantajları – Java Dersleri https://www.kampuskod.com/yazilim/java/hibernate-nedir-hibernate-framework-avantajlari-java-dersleri/ https://www.kampuskod.com/yazilim/java/hibernate-nedir-hibernate-framework-avantajlari-java-dersleri/#respond Sun, 31 May 2020 20:52:30 +0000 https://www.kampuskod.com/?p=7579 Hibernate, veritabanı ile etkileşim kurmak için Java uygulama geliştirmelerini kolaylaştıran bir Java Frameworku’dur. Hibernate açık kaynak kodlu, hafif, ORM (Nesne İlişkisel Haritalama/Eşleme (Object Relational Mapping) ) aracıdır. Hibernate, veri sürekliliği için JPA’nın tanımlamalarını uygular. ORM Tool Nedir? ORM tool (aracı), veri oluşturma, veri değiştirme ve veri erişimini basitleştirir. Veritabanı üzerinde saklanan verilere nesne eşleyen bir […]

The post Hibernate Nedir? Hibernate Framework Avantajları – Java Dersleri first appeared on Kampüs Kod.]]>
Hibernate, veritabanı ile etkileşim kurmak için Java uygulama geliştirmelerini kolaylaştıran bir Java Frameworku’dur. Hibernate açık kaynak kodlu, hafif, ORM (Nesne İlişkisel Haritalama/Eşleme (Object Relational Mapping) ) aracıdır. Hibernate, veri sürekliliği için JPA’nın tanımlamalarını uygular.

ORM Tool Nedir?

ORM tool (aracı), veri oluşturma, veri değiştirme ve veri erişimini basitleştirir. Veritabanı üzerinde saklanan verilere nesne eşleyen bir programlama tekniğidir.

Hibernate ORM Tool Şeması
Hibernate ORM Tool Şeması

ORM tool, veritabanıyla etkileşim kurmak için JDBC API kullanır.

JPA Nedir?

Java Persistence API (JPA), ORM araçlarına (tools) belirli fonksiyonellik ve standart sağlayan bir Java spesifikasyonudur. javax.persistence paketi, JPA sınıfları ve arayüzlerini içerir.

Hibernate Framework Avantajları

  • Açık Kaynak Kodlu ve Hafif (Open Source and Lightweight)

Hibernate framework’u LGPL lisansı altında açık kaynak kodludur ve hafiftir.

  • Hızlı Performans (Fast Performance)

Hibernate Framework’nun performansı hızlıdır çünkü cache (önbellek) kullanılır. Hibernate Framework’te iki tür cache vardır: İlk Seviye Cache ve İkinci Seviye Cache. İlk Seviye Cache varsayılan olarak gelmektedir.

  • Veritabanı Bağımsız Sorgu (Database Independent Query)

HQL (Hibernate Query Language (Hibernate Sorgu Dili)) SQL’in nesne yönelimli bir versiyonudur. Veritabanından bağımsız sorgular üretir. Böylece, veritabanına özgü sorgular yazmanıza gerek yoktur. Hibernate’den önce, proje için veritabanı değiştirilirse, bakım problemlerine yol açan SQL sorgusunu da değiştirmemiz gerekir.

  • Otomatik Tablo Oluşturma (Automatic Table Creation)

Hibernate Framework, veritabanı tablolarını otomatik olarak oluşturmak için kolaylık sağlar. Bu yüzden, veritabanındaki tabloları manuel olarak eklenmesine gerek yoktur.

  • Karmaşık Birleşmeyi Basitleştirir (Simplifies Complex Join)

Hibernate Framework’te birçok tablodan veri çekmek, kolaydır.

  • Sorgu İstatistikleri ve Veritabanı Durumunu Sağlar (Provides Query Statistics and Database Status)

Hibernate, sorgu önbelleğini (cache) destekler ve sorgu ve veritabanı durumu hakkında istatistikler sağlar.



Kaynaklar

https://hibernate.org/orm/

https://www.javatpoint.com/hibernate-tutorial

The post Hibernate Nedir? Hibernate Framework Avantajları – Java Dersleri first appeared on Kampüs Kod.]]>
https://www.kampuskod.com/yazilim/java/hibernate-nedir-hibernate-framework-avantajlari-java-dersleri/feed/ 0
Java Erişim Belirleyiciler (Access Modifier) – Java Dersleri https://www.kampuskod.com/yazilim/java/java-erisim-belirleyiciler-access-modifier-java-dersleri/ https://www.kampuskod.com/yazilim/java/java-erisim-belirleyiciler-access-modifier-java-dersleri/#respond Tue, 26 May 2020 19:07:29 +0000 https://www.kampuskod.com/?p=7085 Sınıf Üyelerine Erişimi Kontrol Etme Erişim düzey belirleyiciler, diğer sınıfların belirli bir alanı kullanıp kullanmayacağını veya belirli bir yöntemi çağırıp çağıramayacağını belirler. Erişim kontrolünün iki seviyesi vardır: En üst seviyede – public veya package-private (belirgin/açık değiştirici/belirleyici yok (no explicit modifier)) Üye seviyesinde – public, private, protected veya package-private (belirgin/açık değiştirici/belirleyici yok (no explicit modifier)) //no […]

The post Java Erişim Belirleyiciler (Access Modifier) – Java Dersleri first appeared on Kampüs Kod.]]>
Sınıf Üyelerine Erişimi Kontrol Etme

Erişim düzey belirleyiciler, diğer sınıfların belirli bir alanı kullanıp kullanmayacağını veya belirli bir yöntemi çağırıp çağıramayacağını belirler. Erişim kontrolünün iki seviyesi vardır:

  • En üst seviyede – public veya package-private (belirgin/açık değiştirici/belirleyici yok (no explicit modifier))
  • Üye seviyesinde – public, private, protected veya package-private (belirgin/açık değiştirici/belirleyici yok (no explicit modifier))

//no explicit modifier: Anlamı paket erişimidir. Basitçe açıklarsak, oluşturduğunuz herhangi bir sınıfla aynı paketi paylaşan bir sınıf metotlarınızı görebilir veya kullanabilir. Üst sınıfla aynı pakette olmadıkça alt sınıflar metotlarınızı göremez veya kullanamaz.

Bir sınıf, public belirleyicisiyle bildirilebilir, bu durumda bu sınıf, her yerdeki tüm sınıflarda görülebilir. Bir sınıfın belirleyicisi yoksa (varsayılan (default), package-private olarakta bilinir), o sadece kendi paketinin içinde görünürdür. (paketler ilişkili sınıfların grupları olarak isimlendirilir – sonraki bir derste bunları öğreneceksiniz.)

Üye seviyesinde, ayrıca public belirleyici kullanabilirsiniz veya üst seviye sınıflarda olduğu gibi ve aynı anlama gelen belirleyicisiz (package-private) kullabilirsiniz. Açıklamak gerekirse; belirleyicisiz dediğimiz herhangi bir erişim belirleyici kullanmamaktır. Eğer ki bir erişim belirleyici kullanmazsanız, sadece kendi paket içinde görünür. Üyeler için, ek iki erişim belirleyici vardır: private ve protected. Private belirleyici, üyeye sadece kendi sınıfı içinde erişilebileceğini belirtir. Protected belirleyici, üyeye sadece kendi paketi içinde (package-private ‘da olduğu gibi) ve ek olarak başka paketteki onun sınıfının bir alt sınıfı tarafından erişilebileceğini belirtir.

Aşağıdaki tablo her belirleyici tarafından izin verdiği üyelere erişim gösterilmektedir.

Modifier
(Belirleyici)
Class
(Sınıf)
Package
(Paket)
Subclass
(Alt sınıf)
World
(Tüm Proje)
publicEvetEvetEvetEvet
protectedEvetEvetEvetHayır
no modifierEvetEvetHayırHayır
privateEvetHayırHayırHayır
Erişim Seviyeleri / Java Erişim Belirleyici Seviyeleri

İlk veri sütunu, sınıfın kendisinin erişim seviyesi tarafından tanımlanan üyeye erişimi olup olmadığını gösterir. Gördüğünüz gibi, bir sınıfın her zaman kendi üyelerine erişimi vardır. İkinci sütun, sınıfla benzer paketteki sınıfların (ebeveynliklerini dikkate almadan) üyeye erişimi olup olmadığını gösterir. Üçüncü sütun, bu paketin dışında bildirilen sınıfın alt sınıflarının üyeye erişimi olup olmadığını gösterir. Dördüncü sütun, tüm sınıfların üyeye erişimi olup olmadığını gösterir.

Erişim seviyeleri iyi şekilde sizi etkiler. Birincisi, başka bir kaynaktan gelen sınıfları kullandığınızda, örneğin Java platformundaki sınıflar, erişim seviyeleri kendi sınıflarınızın hangi üyelerini kullanabileceğini belirler. İkincisi, bir sınıf yazdığınızda, sınıfınızdaki her üye değişkenin ve her metotun hangi erişim seviyesine sahip olması gerektiğine karar vermeniz gerekir.

Bir sınıf koleksiyonuna bakalım ve erişim seviyelerinin görünürlüğü nasıl etkilediğini görelim. Aşağıdaki şekil bu örnekteki 4 sınıfı ve ilişkilerinin nasıl olduğunu gösterir.

Erişim Seviyelerini Örneklerle Açıklamak İçin Kullanılan Örnek Sınıflar ve Paketler

Aşağıdaki tablo, Alpha sınıfının üyelerinin, kendilerine uygulanabilen erişim belirleyicilerin her birisi için nerede göründüklerini gösterir.

Modifier
(Belirleyici)
AlphaBetaAlphasubGamma
publicEvetEvetEvetEvet
protectedEvetEvetEvetHayır
no modifierEvetEvetHayırHayır
privateEvetHayırHayırHayır
Görünürlük / Java Erişim Belirleyici Seviyeleri

Bir Erişim Seviyesi Seçme İpuçları

Başka programcılar sizin sınıfınızı kullanırsa, yanlış kullanımdan meydana gelen hataların oluşmamasını sağlamak istersiniz. Erişim seviyeleri bunu yapmak için size yardım edebilir.

  • Belirli bir üye için anlamlı olan en kısıtlayıcı erişim düzeyini kullanın. İyi bir nedeniniz yoksa, private kullanın.
  • Sabitler (constants) hariç public alanlardan kaçının. (Bu eğitimde pek çok örnekte public alanlar kullanılır. Bu bazı noktaları kısaca açıklamaya yardımcı olabilir, ancak ürün kodu için tavsiye edilmez.) Public alanlar belirli bir uygulamaya bağlama ve kodunuzu değiştirmedeki esnekliğinizi sınırlama eğilimindedir.

Bu yazı Oracle Java Dökümanı kullanılarak İngilizceden Türkçeye çevrilmiştir. Sadece kaynak göstererek kullanabilirsiniz.

Çeviri Yapılan Bölüm Linki

The post Java Erişim Belirleyiciler (Access Modifier) – Java Dersleri first appeared on Kampüs Kod.]]>
https://www.kampuskod.com/yazilim/java/java-erisim-belirleyiciler-access-modifier-java-dersleri/feed/ 0
GET vs POST Arasındaki Fark Nedir? https://www.kampuskod.com/yazilim/java/get-vs-post-arasindaki-fark-nedir/ https://www.kampuskod.com/yazilim/java/get-vs-post-arasindaki-fark-nedir/#respond Thu, 14 May 2020 22:58:26 +0000 https://www.kampuskod.com/?p=6857 GET ve POST, HTTP protokolünün metotlarıdır. Bu yazımızda size GET ve POST metotlarının özelliklerini anlatıp, aynı zamanda GET ve POST metotlarının farklarına değineceğiz. HTTP Nedir? HTTP nasıl çalışır? HTTP Açılımı ve Anlamı GET Metotu GET metotu belirtilen bir kaynaktan veri istemek için kullanılır. GET en yayın HTTP metotlarından biridir. GET metotunda gönderilen istekler URL üzerinden […]

The post GET vs POST Arasındaki Fark Nedir? first appeared on Kampüs Kod.]]>
GET ve POST, HTTP protokolünün metotlarıdır. Bu yazımızda size GET ve POST metotlarının özelliklerini anlatıp, aynı zamanda GET ve POST metotlarının farklarına değineceğiz.

GET Metotu

GET metotu belirtilen bir kaynaktan veri istemek için kullanılır. GET en yayın HTTP metotlarından biridir. GET metotunda gönderilen istekler URL üzerinden gönderilir.

/kampuskod/demo_form.php?isim1=deger1&isim2=deger2

GET Metotu Özellikleri

  • GET istekleri önbellekte (cache) tutulabilir.
  • GET istekleri tarayıcı geçmişinde kalır.
  • GET istekleri yer imi (bookmark) olarak eklenebilir.
  • Önemli ve gizli verileri gönderirken, GET istekleri asla kullanılmamalıdır.
  • GET isteklerinin uzunluk kısıtlamaları vardır.
  • GET istekleri sadece veri istemek içindir. (Değiştirmek için kullanılmaz.)

POST Metotu

POST metotu, işlenmiş verileri belirtilen bir kaynağa gönderir. POST metotu en yaygın HTTP metotlarından biridir. POST metotunda, gönderilen istekler HTTP mesaj gövdesinde gönderilir.

POST /kampuskod/demo_form.php HTTP/1.1
Host: kampuskod.com
isim1=deger1&isim2=deger2

POST Metotu Özellikleri

  • POST istekleri asla önbellekte tutulamaz.
  • POST istekleri tarayıcı geçmişinde kalamaz.
  • POST istekleri yer imi olarak eklenemez.
  • POST isteklerinin veri uzunluğu üzerinde kısıtlamaları yoktur.

GET ve POST Arasındaki Farklar

GETPOST
Geri Butonu / Sayfa YenilemeSorunsuzdur. Yenilenen
veya gidilen sayfa kaybolmaz.
Gidelen sayfa için tarayıcı
re-submit uyarısı verir.
Yer İmlemeYer imi olarak eklenebilir.Yer imi olarak eklenemez.
Önbellekte TutulmaTutulabilir.Tutulamaz.
Kodlama Tipi
(Encoding type)
application/x-www-form-urlencodedapplication/x-www-form-urlencoded
veya  multipart/form-data
Tarayıcı GeçmişiParametreler / Değişkenler tarayıcı geçmişinde kalır.Parametreler / Değişkenler tarayıcı geçmişinde kalmaz.
Karakter LimitiURL Maksimum 2048 karakterden oluşabilir.Kısıtlama yoktur.
Veri Tipi KısıtlamasıSadece ASCII karakterlerine izin verilir.Kısıtlama yoktur. Ayrıca Binary veri izinlidir.
GüvenlikPOST ile kıyaslandığında daha az güvenlidir.
Parolaları veya diğer hassas bilgileri
ASLA GET kullanarak göndermeyin.
GET ile kıyaslandığında daha güvenlidir. Çünkü parametreler
tarayıcı geçmişinde veya
web sunucu kayıtlarında tutulamaz.
GörünürlükVeri, URL üzerinde herkese görünürdür.Veri, URL üzerinde görülemez.

Kaynaklar

https://www.javatpoint.com/get-vs-post

https://www.w3schools.com/tags/ref_httpmethods.asp


The post GET vs POST Arasındaki Fark Nedir? first appeared on Kampüs Kod.]]>
https://www.kampuskod.com/yazilim/java/get-vs-post-arasindaki-fark-nedir/feed/ 0
HTTP Nedir? HTTP nasıl çalışır? HTTP Açılımı ve Anlamı https://www.kampuskod.com/yazilim/http-nedir-http-nasil-calisir-http-acilimi-ve-anlami/ https://www.kampuskod.com/yazilim/http-nedir-http-nasil-calisir-http-acilimi-ve-anlami/#respond Wed, 13 May 2020 04:15:56 +0000 https://www.kampuskod.com/?p=6977 Hypertext Transfer Protocol (HTTP) istemciler (kullanıcılar/bilgisyarlar) ile sunucular arasındaki iletişimleri sağlamak için tasarlanmıştır. HTTP bir istemci ve sunucu arasında istek-yanıt protokolü gibi çalışır. Bir web tarayıcısı istemci (client) olabilir ve web sitesini barındıran bir bilgiyasardaki uygulama sunucu olabilir. Örneğin; bir istemci (tarayıcı), sunucuya bir HTTP isteği gönderir, sonra sunucu istemciye bir yanıt döner. Yanıt, istek […]

The post HTTP Nedir? HTTP nasıl çalışır? HTTP Açılımı ve Anlamı first appeared on Kampüs Kod.]]>
Hypertext Transfer Protocol (HTTP) istemciler (kullanıcılar/bilgisyarlar) ile sunucular arasındaki iletişimleri sağlamak için tasarlanmıştır.

HTTP bir istemci ve sunucu arasında istek-yanıt protokolü gibi çalışır.

Bir web tarayıcısı istemci (client) olabilir ve web sitesini barındıran bir bilgiyasardaki uygulama sunucu olabilir.

Örneğin; bir istemci (tarayıcı), sunucuya bir HTTP isteği gönderir, sonra sunucu istemciye bir yanıt döner. Yanıt, istek hakkında durum bilgisini içerir ve ayrıca istenen içeriği de barındırabilir.

HTTP Nedir? HTTP nasıl çalışır? HTTP Açılımı ve Anlamı
HTTP Nedir? HTTP nasıl çalışır? HTTP Açılımı ve Anlamı
The post HTTP Nedir? HTTP nasıl çalışır? HTTP Açılımı ve Anlamı first appeared on Kampüs Kod.]]>
https://www.kampuskod.com/yazilim/http-nedir-http-nasil-calisir-http-acilimi-ve-anlami/feed/ 0
Java Servlet Nedir? – Java Dersleri https://www.kampuskod.com/yazilim/java/java-servlet-nedir-java-dersleri/ https://www.kampuskod.com/yazilim/java/java-servlet-nedir-java-dersleri/#respond Sun, 10 May 2020 05:50:00 +0000 https://www.kampuskod.com/?p=6821 Java Web teknolojisinin temelini anlamak için Java Servlet kavramını inceleyeceğiz. Java Servlet kavramı Java EE tarafında sıkça kullanılıyor. Çünkü projelerin neredeyse tamamı web platformları üzerinde. Peki, nedir bu Java Servlet? Servlet Nedir? Servletler, bir Web veya uygulama sunucusu üzerinde çalışan ve bir Web tarayıcısından veya başka bir HTTP istemcisinden gelen istekler ile HTTP sunucusu üzerindeki […]

The post Java Servlet Nedir? – Java Dersleri first appeared on Kampüs Kod.]]>
Java Web teknolojisinin temelini anlamak için Java Servlet kavramını inceleyeceğiz. Java Servlet kavramı Java EE tarafında sıkça kullanılıyor. Çünkü projelerin neredeyse tamamı web platformları üzerinde. Peki, nedir bu Java Servlet?

Servlet Nedir?

Servletler, bir Web veya uygulama sunucusu üzerinde çalışan ve bir Web tarayıcısından veya başka bir HTTP istemcisinden gelen istekler ile HTTP sunucusu üzerindeki veritabanları veya uygulamalar arasında orta bir katman gibi davranan programlardır. (Çok karmaşık gelmiş olabilir bu tanım, şekil ile açıklayalım 🙂 )

Servlet, dinamik bir web uygulaması oluşturmak için sunucu (server) üzerinde uygulamayı çalıştıran bir web bileşenidir. Servlet bir Java sınıfıdır.

Servlet Kullanmanın Avantajları Nelerdir?

  • Daha iyi bir performans sağlar.
  • Servletler, her istemci (client) isteğini karşılamak için ayrı bir işlem (process) oluşturmaya ihtiyaç duymaz.
  • Javada yazıldığı için Servetler platform bağımsızdır.
  • Sunucu üzerindeki Java güvenlik yöneticisi, bir sunucu makinesindeki kaynakları korumak için bir dizi kısıtlama uygular. Bu yüzden servletler güvenilirdir.
  • Java sınıfı kütüphaneleri tam fonksiyonelliği bir servlet tarafından kullanılabilir. Yani database, grafiksel arayüz (applet) vb. sınıflar ile iletişim kurabilir.

Servletlerin Yapabilecekleri

  • İstemciler (clients) / Tarayıcılar tarafından gönderilen açık (explicit) verileri okuyun. Bir web sayfası üzerindeki form verileri veya bir arayüz (applet) üzerinden gelen veriler.
  • İstemciler (clients) / Tarayıcılar tarafından gönderilen kapalı (implicit) HTTP istek verilerini okuyun. Bu istekler tarayıcının anladığı çerezleri, medya türlerini ve sıkıştırma şemalarını içerir.
  • Verileri işleyin ve sonuçları oluşturun. Bu aşamada veritabanı ile bağlantı kurmanız gerekebilir.
  • İstemcilere (clients) / Tarayıcılara açık veriler gönderin. HTML, XML, .gif ve EXCEL gibi
  • İstemcilere (clients) / Tarayıcılara kapalı HTTP yanıtları gönderin. (Çerezler (cookies) ve cache paratmeleri gibi)

Servetler, büyük ölçekli geliştirme projelerini destekleyen Java sınıf kütüphanelerinin genişletilmiş bir versiyonu olan Java Enterprise Edition’un (Kurumsal Sürüm) standart bir parçası olan javax.servlet ve javax.servlet.http paketleri kullanılarak oluşturulabilir.



Servlet Yaşam Döngüsü

  • Servlet, init() metotu çağrılarak başlatılır (initialize).
  • Servlet, bir istemcinin isteğini işlemek için service() metotunu çağırır.
  • Servlet, destroy() metotu çağrılarak sonlanır (terminate).
  • Sonunda, servlet Java Sanal Makinesinin (JVM) çöp toplayıcısı (garbage collector) tarafından toplanan çöptür.

init() Metotu

init() moetotu sadece bir kez çağrılır. Sadece servlet oluşturulduğunda init() metotu çağrılır ve daha sonra herhangi bir kullanıcı istekleri için çağrılmaz.

Servlet normalde bir kullanıcı servlet’e karşılık gelen bir URL’i ilk kez çağırdığında oluşturulur ancak, sunucu ilk başlatıldığında servlet yüklenmesini dahi belirtebilirsiniz.

init() metot imzası:

public void init() throws ServletException {
   // Initialization code...
}

service() Metotu

Service metotu, asıl görevleri gerçekleştirmek için ana metottur. Servlet konteyneri, istemciden(tarayıcılardan) genlen istekleri karşılamak ve istemciye yanıt dönmek için service() metotunu çağırır.

Service metotu, HTTP istek tipini (GET, POST, PUT, DELETE vb.) kontrol eder ve doGet, doPost, doPut, doDelete gibi metotları uygun şekilde çağırır.

service metot imzası:

public void service(ServletRequest request, ServletResponse response) 
   throws ServletException, IOException {
}

doGet() Metotu

Bir GET isteği, normal bir URL isteğinden veya tanımlanmış metotu olmayan bir HTML formundan kaynaklanır ve doGet() metotu tarafından karşılanmalıdır.

public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
   // Servlet code
}

doPost() Metotu

Bir POST isteği, metot olarak POST alan bir HTML formundan kaynaklanır ve doPost() metotu tarafından karşılanmalıdır.

public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
   // Servlet code
}

destroy() Metotu

Destroy metotu, servletin yaşam döngüsünün en sonunda sadece bir kez çağrılır. Bu metot, veritabanı bağlantılarını kapatmak, arka plandaki threadleri durdurmak vb. işleri yapmak için servlet’e bir şans verir.

Destroy metotu çağrıldıktan sonra, servlet nesnesi çöp toplama (garbage collection) için işaretlenir.

destroy metotu tanımlaması:

public void destroy() {
   // Finalization code...
}


Yararlandığım Kaynaklar

https://www.tutorialspoint.com/servlets/index.htm

https://docs.oracle.com/javaee/7/api/javax/servlet/Servlet.html

The post Java Servlet Nedir? – Java Dersleri first appeared on Kampüs Kod.]]>
https://www.kampuskod.com/yazilim/java/java-servlet-nedir-java-dersleri/feed/ 0
Java Paket Nedir? Java Package Yapısı – Java Dersleri https://www.kampuskod.com/yazilim/java/java-paket-nedir-java-package-yapisi-java-dersleri/ https://www.kampuskod.com/yazilim/java/java-paket-nedir-java-package-yapisi-java-dersleri/#respond Sat, 09 May 2020 03:06:21 +0000 https://www.kampuskod.com/?p=6808 Bir paket, ilişkili sınıfları (class) ve arayüzleri (interface) bir grup/takım düzenleyen bir ad alanıdır. Kavramsal olarak, bilgisayarınızdaki farklı klasörlere benzer olarak paketleri düşünebilirsiniz. Bir klasör içerisinde HTML sayfalarınızı, başka bir klasör içinde resimlerinizi ve başka bir klasör içinde de scriptleri veya uygulamaları tutabilirsiniz. Çünkü, Java programlama dilinde yazılmış yazılım yüzlerce veya binlerce birbirinden ayrı sınıftan […]

The post Java Paket Nedir? Java Package Yapısı – Java Dersleri first appeared on Kampüs Kod.]]>
Bir paket, ilişkili sınıfları (class) ve arayüzleri (interface) bir grup/takım düzenleyen bir ad alanıdır. Kavramsal olarak, bilgisayarınızdaki farklı klasörlere benzer olarak paketleri düşünebilirsiniz. Bir klasör içerisinde HTML sayfalarınızı, başka bir klasör içinde resimlerinizi ve başka bir klasör içinde de scriptleri veya uygulamaları tutabilirsiniz. Çünkü, Java programlama dilinde yazılmış yazılım yüzlerce veya binlerce birbirinden ayrı sınıftan oluşabileceğinden, paketler içine ilgili sınıfları (classes) ve arayüzleri (interfaces) yerleştirerek işleri düzenli tutmak mantıklıdır.

Java Platformu, kendi uygulamalarınızda kullanmak için uygun çok büyük bir sınıf kütüphanesi (bir dizi paket) sağlar. Bu kütüphane “Application Programming Interface” veya kısaca “API” olarak bilinir. Onun paketleri, genel amaçlı programlama (general-purpose programming) ile en yaygın ilişkilendirilmiş (associated) görevleri temsil eder. Örneğin, bir String objesi (nesne) karakter stringler için durum ve davranış içerir, bir File (dosya) objesi, dosya sistemi üzerinde bir dosyayı kolayca oluşturmak, silmek, incelemek, karşılaştırmak veya değiştirmek için programcıya izin verir, bir Socket objesi, ağ soketlerinin oluşturulması ve kullanılması için izin verir, çeşitli GUI objeleri, butonları ve onay kutularını (checkboxes) ve grafiksel kullanıcı arayüzleri ilgili başka herhangi bir şeyi kontrol eder. Kelimenin tam anlamıyla seçim yapabileceğiniz binlerce sınıf vardır. Bu, programcının çalışmasını sağlamak için gereken altyapıdan ziyade belli uygulamanızın tasarımı üzerine odaklanmanıza imkan verir.

Java Platformu API Şartnamesi/Beyannamesi/Tanımlaması Java SE platformu tarafından sağlanan bütün paketler (packages), arayüzler (interfaces), sınıflar (classes), alanlar (fields) ve metotlar (methods) için bütün listeyi içerir. Tarayıcınıza sayfayı yükleyin ve onu yer imleyin. Bir programcı olarak, Java Platformu API Şartnamesi en önemli tek referans dokümanınız olacaktır.

Bu yazı Oracle Java Dökümanı kullanılarak İngilizceden Türkçeye çevrilmiştir. Sadece kaynak göstererek kullanabilirsiniz.

Çeviri Yapılan Bölüm Linki

The post Java Paket Nedir? Java Package Yapısı – Java Dersleri first appeared on Kampüs Kod.]]>
https://www.kampuskod.com/yazilim/java/java-paket-nedir-java-package-yapisi-java-dersleri/feed/ 0
Java Interface (Arayüz) Nedir? – Java Dersleri https://www.kampuskod.com/yazilim/java/java-interface-arayuz-nedir-java-dersleri/ https://www.kampuskod.com/yazilim/java/java-interface-arayuz-nedir-java-dersleri/#respond Thu, 07 May 2020 16:29:55 +0000 https://www.kampuskod.com/?p=6747 Interfaceler, sınıf ve dış dünya arasında bir anlaşma oluşturur ve bu anlaşma derleyici tarafından inşa zamanında zorla uygulanır. Sınıfınız bir interface'i uygulamayı talep ederse,sınıf başarıyla derlenmeden önce bu interface tarafından tanımlanmış bütün metotlar sınıfın kaynak kodunda görünmeli.

The post Java Interface (Arayüz) Nedir? – Java Dersleri first appeared on Kampüs Kod.]]>
Daha önce öğrendiğimiz gibi, nesneler ortaya çıkardıkları metotlar sayesinde dış dünya ile etkileşimlerini tanımlar. Metotlar dış dünya ile nesnenin arayüzünü (interface) oluşturur; örneğin, televizyon setinizin önündeki butonlar siz ve onun plastik kaplamasının diğer tarafındaki elektrik kabloları arasında arayüzdür. Televizyonu açmak ve kapatmak için “güç” tuşuna basabilirsiniz.

Interface’in en yaygın hali, bir interface, boş gövdelerle birlikte ilgili metotların bir grubudur. Bir bisikletin davranışı, bir interface (arayüz) gibi belirtildiyse, aşağıdaki gibi görünür;

interface Bicycle {

    //  wheel revolutions per minute
    void changeCadence(int newValue);

    void changeGear(int newValue);

    void speedUp(int increment);

    void applyBrakes(int decrement);
}

Bu interface’i uygulamak için, sınıfınızın adı değişecekti (örneğin, ACMEBicycle gibi belirli bir bisiklet markasına) ve class (sınıf) tanımlamasında “implements” anahtar kelimesini kullanırsınız.

class ACMEBicycle implements Bicycle {

    int cadence = 0;
    int speed = 0;
    int gear = 1;

   // The compiler will now require that methods
   // changeCadence, changeGear, speedUp, and applyBrakes
   // all be implemented. Compilation will fail if those
   // methods are missing from this class.
//Derleyici şimdi changeCadence, changeGear, speedUp, and applyBrakes metotlarının
//uygulanmasını zorunlu tutacaktır. Eğer şu metotlar, bu sınıftan eksikse, derleyici başarız olur. 
    void changeCadence(int newValue) {
         cadence = newValue;
    }

    void changeGear(int newValue) {
         gear = newValue;
    }

    void speedUp(int increment) {
         speed = speed + increment;   
    }

    void applyBrakes(int decrement) {
         speed = speed - decrement;
    }

    void printStates() {
         System.out.println("cadence:" +
             cadence + " speed:" + 
             speed + " gear:" + gear);
    }
}

Bir interface’ın uygulanması, bir sınıfın sağlamayı söz verdiği davranış hakkında daha düzgün / kurallara göre olmasını sağlar. Interfaceler, sınıf ve dış dünya arasında bir anlaşma oluşturur ve bu anlaşma derleyici tarafından inşa zamanında zorla uygulanır. Sınıfınız bir interface’i uygulamayı talep ederse,sınıf başarıyla derlenmeden önce bu interface tarafından tanımlanmış bütün metotlar sınıfın kaynak kodunda görünmeli.

Not: Aslında ACMEBicycle sınıfını derlemek için, uygulanmış interface metotlarının başına “public” anahtar kelimesin eklenmeye ihtiyacı vardır. Gelecek derslerde bu kısımlara detaylıca değinmeye çalışacağız.

Bu yazı Oracle Java Dökümanı kullanılarak İngilizceden Türkçeye çevrilmiştir. Sadece kaynak göstererek kullanabilirsiniz.

Çeviri Yapılan Bölüm Linki

The post Java Interface (Arayüz) Nedir? – Java Dersleri first appeared on Kampüs Kod.]]>
https://www.kampuskod.com/yazilim/java/java-interface-arayuz-nedir-java-dersleri/feed/ 0