某ゲームでわかる!オブジェクト指向(ざっくり分かりたい人向け)
その昔、文系からシステム会社に就職したものの、基本情報試験合格という課題を課せられました。
午後の基本情報試験は選択問題があり、Javaで戦うことを決意し猛勉強を始めました。ところが、全くabstractやclassの概念が頭に入らず、頭の良い人に泣きつくことにしました。
**※大まかな枠を掴むレベルなので詳しく知りたい方は別の記事をご覧ください**
## オブジェクト指向が分からない・・・
対策本とか読んでいると下記の3原則が出てきます。
・継承
・カプセル化
・ポリモーフィズム
これらを理解することでオブジェクト指向の理解度が大きく変わります。(個人的感想)## Fateに置き換えて考えよう
私は特別Fateが好きとかではないのですが、ちょうどそのスマホゲームをやっていたので題材にしてくれました。
設計によって作り方は変わってきますのであくまで一例として認識いただければと思います。## オブジェクト
英霊たちがオブジェクトにあたります。器を求めて攻撃したり、呪いをかけられたり、必殺技(メソッド)を使ったりします。
このクラスがわちゃわちゃすることで物語(システム
Map・ハッシュ操作 【Java】【Kotlin】【Ruby】
# 概要
自主学習のアウトプットです。現場でJavaのMapを操作していた時に、自分の書いたコードがまわりくどいやり方かなと思って調べたらいい方法を見つけたので備忘録です。(実際は周辺のコードと合わなくて使えませんでしたが。。)
学習中のKotlinとRubyで同じことするには?と調べたものも共有します。
# まわりくどいやり方
コードを書いてふと思いました。「なんやこれ、まわりくど」
思わず声に出てしまったコードがこちら
“`Java:Java
Mappokemons = new HashMap ();
pokemons.put(“Pikachu”, “ピカチュウ”);
pokemons.put(“Lapras”, “ラプラス”);
pokemons.put(“Snorlax”, “カビゴン”);
pokemons.put(“Venusaur”, “フシギバナ”);
pokemons.put(“Charizard”, “リザードン”);
pokemons.put(“Blastoise”, “カメックス”
現場で活きる!Java Gold SE11
最近、わさびと山椒にはまっているアラサーです:metal_tone1:
今回はSE歴3年目の私が **Java Gold** を取得した経緯と現場で活かせた点について伝えたいと思います。資格取得は、SE経験年数が浅い人ほど大切だと思っています。
その理由は主に3つ!
:apple:自身が理解できてない範囲を芋づる式に具体的に把握できるから
:apple:実践に必要な知識を体系的に取得できるから
:apple:現場の生産性がぐっと上がるからこれから**Java Gold**の取得を考えている人は、
既にJava Silver を取得しているため、製造の中で進行の妨げになるような困難にぶつかることは少ないと思います。ただ、バグの少ないシステムを製造するにあたり、**Java Gold**の内容を取得しておくことは
実務で頻繁に利用する機能や技術もあれば、フレームワーク等が代わりにやってくれるために直接利用することがない機能、さらにそれを支える基盤的技術に至るまでの多様な知識を習得することになります。全てを理解してこその製造であり、
バグのでないプログラムになると思います
JavaエンジニアがRubyを使ってみて思ったこと
# 前説
– 株式会社SUPER STUDIOの2022年Adventarの記事です。
– 7年ぐらいJava(Spring)を使っていたエンジニアが初めてRuby(Rails)を使ってみた所感のまとめです。
– JavaもRubyもどちらもまだまだ未熟者が書いた記事です。
– Javaの最新のバージョンもキャッチアップできてないのでちょっと知識が古いです。
– Javaの方がいいとか、Rubyの方がいいとか、対立煽りを助長するつもりはありません。
– 自分と同じでJavaばかり使ってきて、Rubyとかどんな感じなんかなあって思ってる人に読んでもらえたら幸いです。# Ruby(Rails)を使い始めて思ったことまとめ
– 型宣言が必要ない
– メソッドの引数にデフォルト値を設定できる
– メソッドの戻り値の型の定義が必要ない
– 最終行の結果がreturnされる
– 後置ifが使える
– if文の戻り値が設定できる
– ActiveRecordが便利1個ずつ見ていきます。
## 型宣言が必要ない
これは解説不要かと思いますが、Rubyは動的型付け言語ですので、Javaのような
【Java + localstack】DynamoDBトランザクションの実装(AWS SDK 1)
# Amazon DynamoDB Transactions
公式サイトのsampleソースを整理してみた。
[DynamoDB トランザクションの例](https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/transaction-example.html)
いつもなら公式Githubへのリンクとか記載あるのですが、これ検索してもコードが見当たらなかったのがキッカケです。。# 準備
localstackを使ってローカル環境で動作確認します。
localstack環境については過去記事を参考にしてください。
[LocalStack導入の準備](https://qiita.com/tmmii/items/49991365c247e612d178#localstack%E5%B0%8E%E5%85%A5%E3%81%AE%E6%BA%96%E5%82%99)
dynamodb-adminを利用してローカル環境でもDynamoDBにアクセスできるようにします。ブラウザからGUI操作が可能になるので便利で
Springの@Autowiredの方式
# @Autowiredとは
SpringのDIコンテナから、インスタンスを注入するための指定のこと。
まずDIコンテナとSpringフレームワークの仕組みを知る必要がある。## DIコンテナとは
アプリ起動時にSpringフレームワークが特定のオブジェクトをインスタンス化しており、そのインスタンスを保管してある場所。
次のアノテーションを付けたクラスがインスタンス化の対象。– @Component
– @Controller
– @Service
– @Repository
– @RestController
– @ControllAdvice
– ManagedBean
– @Namedこれらのアノテーションがついたクラスはコードのなかでnew()でインスタンス化することはなく、DIの仕組みによって呼び出し元クラスへ注入される。
それが@Autowiredアノテーションを目印にして行われる。## 注入する方法
指定の場所により3種類の方法がある。
|種類|場所|備考|
|:-|:-|:-|
|コンストラクタインジェクション|コンストラ
アルゴリズム クイックソート(昇順)
説明
配列の基準値(ピボット)より大きいものと小さいものとのグループに分け、それぞれの中でも新しい基準値を使って同様の作業を行うという手順を再帰的に繰り返し、並び替える。
“`java
public class Main {
public static void quickSort(int[]a,int left,int right) {if (left>=right) {
return;
}int p = a[(left+right)/2];
int l = left;
int r = right;
int tmp;while(l<=r) { while(a[l] < p) { l++; } while(a[r] >
基本情報の擬似言語をもとにクイックソート書いてみたその1
基本情報技術者の擬似言語の学習のため実際にプログラム化してみました。
仕様はそのままに一部アルゴリズム強化のため自分で自分で条件式等を考えているため実際の擬似言語プログラムとは差異があります。基準値は(始まりの要素番号+終わりの要素番号)/2で決めております。別パターンも近いうち投稿したいと思います。
“`java:qiita.java
import java.util.*;public class QuickSort {
public static void main(String[] args) {// データ配列:[80, 60, 40, 70, 30, 10, 50, 20]
// int[] data_array = { 80, 60, 40, 70, 30, 10, 50, 20 };
// int[] data_array = { 80, 60, 40, 70, 30, 10, 50, 70 };
int[] data_array = { 70, 60, 40, 70, 30, 70, 50, 70 };
//
ABC283A~Dの解答[Java]
## はじめに
今回はコンテスト中に書いたコードをDまでそのまま載せようと思います。では、見ていきましょう。
## A – Power
問題文は[こちら](https://atcoder.jp/contests/abc283/tasks/abc283_a)$1$に$A$を$B$回かければ良いと思ってそれを実装しました。
“`A.java
class Main{static final boolean autoFlush = false;
static final Library System = new Library(java.lang.System.in,java.lang.System.out,java.lang.System.err,autoFlush);public static void main(String[] args){
//A、Bの受け取り
int A = System.in.nextInt();
int B = System.in.nextInt();//AをB回かける
int ans = 1;
wh
WindowsでMavenを使えるようにする。
Javaでmvnコマンドが使いたくなったのでその時のメモです。
## Mavenのダウンロード
ApacheのサイトからMavenのZipファイルをダウンロードする。https://maven.apache.org/download.cgi
## Mavenのフォルダを配置する。
Zipを回答しC:\Program Files配下に配置する。
※場所は環境変数PATHで指定できればどこでもよいがコマンドラインで利用するものはProgram Filesに置くのが一般的## 環境変数の設定
### コマンドプロンプトで実行する場合
下記コマンドを実行する。
`SETX /M PATH “%PATH%;C:\Program Files\maven\bin”`### GUI操作の場合
Windowsキーを押し検索バーから「システム環境変数の編集」を入力して選択
環境変数のPATHを選択し編集ボタンを押す。
![環境変数の指定(pic1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8924
discord botでminecraft serverを操作する【総集編】
# 初めに
この記事は[discord botからminecraft serverを動かすことが目標のアドベントカレンダー](https://qiita.com/advent-calendar/2022/itohal)最終日です.必要な環境は
– Python 3.8以降
– discord.py 2以上
– java 17以上です.私の環境は
– WSL, Ubuntu22.04.1
– Python 3.10.6
– discord.py 2.1.0となっています.
# discord botを作成する
まず,botを作成するためにアカウントを取得します.
[こちらの記事](https://qiita.com/halglobe0108/items/dc056cc48256eeff5526)で説明しています.[discord developer portal](https://discord.com/developers/docs/intro)にてアカウントを作成しましょう.このとき,トークンをコピーしておいてください.# トークンを環境変数に設定
先程コピーしたト
ポリモーフィズム
説明
実際に動作しているインスタンスを、インスタンスの元となった型とは異なる型で扱える仕組みのことを指す。条件は、継承、あるいは実現の関係にあるかである。
“`java
public interface A {
public void start();
}
public class B implements A {
public void start(){
System.out.println(“B”)
}
}
public class C extends B {
public void start(){
System.out.println(“C”);
}
}
public class Main {
public static void main(String[] args) {
A b = new B();
A c = new C();
ArrayList
### 配列とのコード比較
“`java:配列を使ったコード
// 配列を準備
String[] names = new String(4)//4人追加
names[0] = “はたけやま”;
names[1] = “さいとう”;
names[2] = “とよかわ”;
names[3] = “わたなべ”;System.out.println(names[1]);
“`
“`java:ArrayListを使ったコード
import java.util.ArrayList;//ArrayListを準備
ArrayListnames = new ArrayList (); //4人追加
names.add(“はたけやま”);
names.add(“さいとう”);
names.add(“とよかわ”);
names.add(“わたなべ”);System.out.println(names.get(1));
“`### ArrayListの特徴
1.import文を記述する。
`import java.util.ArrayList;
初心者だけどGradleをEclipseで使いたい!
[^1]:自分は画像と異なり`C:\Gradle\gradle-7.6`にPATHを通して、Pathに`%GRADLE_HOME%\bin`を設定しています。
[^2]:https://www.web-dev-qa-db-ja.com/ja/groovy/gradle%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E3%82%92%E9%81%A9%E7%94%A8%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%AE%E9%81%95%E3%81%84/1056004156/
[^3]:https://qiita.com/tenten0213/items/41cd8eb0a3fce121095c初めまして、堀井です。
ブログは色々書いてきたもののQiitaは初めてなのでお手柔らかにお願いします。
さて、プログラムを色々書いているとビルドツールにも手を出したくなりますよね。
Javaのビルドツールと言えば[Ant](https://ant.apache.org/), [Maven](https://
Spring AOPの学習
# きっかけ
Spring bootを使用する開発をするにあたって従来通りのコーディングで進めるだけではなく、フレームワークを活用することを意識したいので学習した。
## AOPとは
Aspect Oriented Programming、アスペクト指向プログラミングの略。
アスペクトとは日本語では「外観、様相」という意味だが、この言葉から仕組みを理解するのは難しい。
ここでは本来の処理の間に、別の場所に記載した処理を割り込ませて実行するような方法と理解した。### 例
たとえば、メソッドの開始に共通のデバッグログを出力したい場合、従来の方法ではすべてのメソッドにlog出力の処理を記載するかもしくはlog出力のためのメソッドをコールする必要がある。
#### AOPを使用しない場合
“`java
public class ClassA {
public void method1(){
//ログの出力処理がコード内に存在する。
log.info(“method1() enter”);//ビジネス
インクリメント演算子(++)・デクリメント演算子(–)
説明
変数の値に「1」を加算・減算するための演算子である。前置「++a」と後置「a++」がある。前置は、演算結果が代入されることに対し、後置は、元の値のコピーが戻されてから、変数の値が加算される。
“`java
public class Main {
public static void main(String[] args) {//前置と後置の違い
int a = 10;
int b = ++a;//b = 1 + 10
int c = a++;//c = 11 → a = 12int d = 10;
int e = d++ + d + d– – d– + ++d;//10 + 11 + 11 -10 + 10
}
}
“`
MVCモデル JSP サーブレット Beans メモ
## MVCモデルとは
webアプリの設計モデル
Beansが処理ロジックを担当
JSPが画面表示担当
サーブレットが全体のコントロールを担当## 流れ
リクエストがサーブレットに届く。その後、BeansやJSPと連携し、レスポンスする。
また、データベースを組み込む場合、beansに入力する。
アクションタグ メモ
## タグ
### jsp:useBean
指定したスコープ内のインスタンスを取得。なければ新規のインスタンスを生成
スコープ:オブジェクトの利用可能期間を決めることができる“`java
“`
### setProperty
Beansが持つsetterメソッドを呼び出す### getProperty
Beansが持つgetterメソッドを呼び出す参考資料
ApplicationRunnerはいつ実行されるのか
# 初めに
Spring BootでApplicationRunnerインターフェースを用いてバッチ処理を実装する機会があった。
Application Runnerがいつ実行されるのかパッとわからなかったので調査を行った。
(動かしてみればなんとなく理解できるもののもうちょっと理解度を上げたい)
ここではApplicationRunnerインターフェースを実装したbeanをApplicationRunnerと呼ぶこととする。# 前提
本稿は以下のバージョンをベースに記述している。
* Spring Boot V3.0.1# 結論
ApplicationRunnerはSpring Bootアプリケーション起動時の最後の処理として実行される。
もし複数存在すれば全てを実行する。(アノテーション(@Order)などで順番を明示していればその順番で実行される)# Application Runnerとは
Application Runnerとは、以下のインターフェースを実装したbeanである。>Interface used to indicate that a bean sh
JavaBeans
## JavaBeansとは
インスタンスの内容をまるごとファイルに保存するメソッド## 設計ルール
クラスをpublicにする
引数なしのコンストラクタを作成
java.io.serializableを実装
パッケージ化
getter/setterを追加参考資料